Python正则表达式:提取除后接/前随特定术语外的所有数字
正则提取数字排除指定内容的解决方案
需求梳理
需要从文本中提取数字,同时排除三类内容:
- 后接指定词语/字符的数字
- 紧跟在指定词语/字符之后的数字
- 格式为带
/的日期类内容
针对给出的示例,最终需要保留的匹配结果为:4.5、$55、1,200
原有正则的问题
- 没有补充负向后行断言规则,无法过滤紧跟在指定前缀后的数字(比如charB后的21.6、wordA后的3)
- 前瞻匹配逻辑边界不清晰,无法正确过滤后接指定后缀的数字
- 没有添加日期格式的过滤规则,无法排除带
/的日期相关数字
调整后可用正则
(?<!\bwordA |charB)(?<!\/)\$?\d+(?:[.,]\d+)*(?!\/|charA| ?\bwordB)
正则规则拆解
(?<!\bwordA |charB):负向后行断言,过滤所有紧跟在wordA(带空格)或charB后的数字(?<!\/):负向后行断言,过滤前面带/的数字,避免匹配日期内的数字\$?\d+(?:[.,]\d+)*:核心数字匹配规则,兼容带$前缀、千分位逗号、小数点的数字格式(?!\/|charA| ?\bwordB):负向前瞻断言,过滤后面带/、charA、可选空格加wordB的数字,同时避免匹配日期内的数字
效果验证
对应示例文本4.5 $55 1,200 wordA 3 sometext 2 wordB sometext 4.3charA sometext charB21.6 sometext 11/10/22,所有需要排除的3、2、4.3、21.6、11/10/22都已被过滤,仅保留符合要求的数字。
注意事项
- 该正则需要支持可变长度负向后行断言的引擎才能正常运行,对应环境为JavaScript ES2018+、Python 3.10+、Java 9+等
- 如果需要调整排除的特定词语/字符,直接修改前后断言内的匹配项即可
内容的提问来源于stack exchange,提问作者jokol
相关产品推荐
相关产品推荐

