You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何用正则表达式捕获数字+度量单位+后续词的组合模式

正则提取三段式测量文本方案

需求说明

需要从长字符串中提取按固定顺序组成的三段式模式:

  • 1位或2位可带小数点的数字,也支持整数加分数的形式,示例:2 1/5
  • 度量单位或对应符号,可选范围:[ft, feet, foot, inch, ', "]
  • 紧跟在度量单位之后的描述词,示例:height、long、width、t、w、l等

现有问题梳理

原有正则存在三个明显问题:

  1. 没有限制数字长度,会捕获两位以上的数字,不符合需求
  2. 多分支重复写相同的数字匹配逻辑,表达式冗余繁琐
  3. 未兼容整数加分数的数字格式,无法识别2 1/5 ft这类写法

优化实现方案

优化思路

将正则按三段拆分,分别做逻辑优化后合并:

  1. 数字部分:用非捕获组兼容两种数字格式,同时通过\d{1,2}限制整数部分最多2位,避免匹配超长数字
  2. 单位部分:把所有可选单位合并到同一个非捕获分组,无需重复写前置匹配逻辑
  3. 描述词部分:保留\w+匹配即可,统一处理各段之间的空格匹配

完整实现代码

import re

text = '''..text....it approx. 2.0 ft long 335.1 feet wide 9.5' high 2 1/5 ft height 12 inch wide and located.....text...'''
# 优化后的正则表达式
pattern = r'\b(?:\d{1,2}(?:\.\d+)?|\d{1,2}\s+\d{1,2}\/\d{1,2})\s*(?:ft|feet|foot|inch|\'|")\s+\w+'
matched_list = re.findall(pattern, text)
print(matched_list)

运行结果

['2.0 ft long', "9.5' high", '2 1/5 ft height', '12 inch wide']

可以看到原有3位数字的335.1 feet wide已经被过滤,同时分数格式的2 1/5 ft height可以正常识别,正则长度也大幅精简。

内容的提问来源于stack exchange,提问作者Eng_GR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 11:45:04