正则表达式匹配结果与Python re.search运行结果不一致问题
匹配结果差异原因说明
差异根源
- 最常见的原因是regex101测试时选择的正则引擎、启用的修饰符和Python
re库默认配置不一致。比如选择PCRE引擎、开启全局匹配或者多行匹配,都会和Python原生re的执行逻辑出现偏差。 - 你写的正则本身逻辑有缺陷:第二捕获组
(\d*([-.]\d*)*)允许空匹配,也没有限制不能出现空白符。Python的re执行匹配时,这个分组只能匹配到末尾的0.3700,前面惰性匹配的.*?就会把Myteeeeext 0.366-全部分到第一组。
修复方案
你要捕获第一个数字出现前的所有文本,完全没必要写这么复杂的正则,直接匹配所有非数字开头的内容即可:
import re regex = r"^([^\d]*)" message = "Myteeeeext 0.366- 0.3700" result = re.search(regex, message) print(result.group(1))
运行后输出就是你预期的Myteeeeext 。
内容的提问来源于stack exchange,提问作者Biscuit
相关产品推荐
相关产品推荐

