一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何利用正则表达式提取字符串里的数字内容

时间:2026-07-14 11:18:52 编辑:袖梨 来源:一聚教程网

正则提取数字需按场景选模式:d+提取连续数字块;-?d+.?d*兼顾带符号小数但需后处理;-?d+.d+严格匹配浮点数;结合上下文用捕获组(如ID、版本、金额)更精准。

正则表达式提取字符串中的数字,关键在于根据需求选择合适的模式:纯整数、带符号数字、小数、科学计数法,或连续数字片段。不同场景需区别对待,不能一概而用 d+

提取所有连续的数字(最常用)

适用于从文本中捞出所有独立的数字块,比如“订单号:12345,金额:¥67.89,折扣-5%”里想拿到 12345、67、89、5。

  • 模式:d+ —— 匹配一个或多个连续数字字符
  • 注意:d 等价于 [0-9],不匹配小数点、负号或小数部分
  • 示例(Python):
    import re<br>text = "温度23.5℃,湿度-45%,编号A123B456"<br>re.findall(r'd+', text)  # → ['23', '5', '45', '123', '456']

提取完整数字(含负号、小数)

当需要保留数字的原始语义(如 -12.34 或 3.14159),就不能只靠 d+,得覆盖符号和小数点。

  • 模式:-?d+.?d* —— 支持可选负号、至少一位整数、可选小数点及后续数字
  • 更严谨写法(避免匹配孤立小数点):-?d+.?d+|-.d+|.d+,但通常用 -?d+.?d* 并过滤空结果更实用
  • 推荐模式(兼顾常见情况):-?d+.?d*(?(用负向先行断言排除结尾为小数点的情况)
  • 实际建议:用 -?d+.?d* + 后处理(如 float(x) 尝试转换,跳过无效项)

提取浮点数(严格匹配小数格式)

若明确要小数(如价格、坐标),需确保小数点前后至少有一位数字。

  • 模式:-?d+.d+ —— 匹配带小数点的标准浮点数,如 3.14、-0.001
  • 补充支持整数形式(如 5 和 5.0 都算数字):-?d+.?d+,但会误匹配 "123."(末尾小数点)
  • 稳妥写法:-?(?:d+.d+|d+.|.d+|d+),再用逻辑过滤掉纯小数点或空段
  • 多数语言有现成数字解析函数(如 Python 的 ast.literal_evalfloat()),正则提取后建议转类型校验

按位置或上下文精准提取

有时数字有固定位置或前缀(如 “ID: 10086”、“版本 v2.3.1”),可用捕获组提高准确性。

  • ID 提取:r'ID:s*(d+)' → 只取冒号后的数字
  • 版本号提取:r'v(d+.d+.d+)' → 捕获形如 v1.2.3 的完整版本
  • 金额提取:r'¥(d+(?:.d+)?)' → 匹配 ¥ 后面的数字(含小数)
  • 使用 re.search()re.finditer() 获取 group(1),比全量 findall 更可控

热门栏目