Python正则如何实现首次匹配即停止,提取指定字符串片段?
问题原因
你当前使用的.*是贪婪匹配规则,会尽可能匹配最长的符合条件的字符串,因此会一直匹配到整个文本中最后一个数字50才停止,不符合你匹配到第一个数字就结束的需求。
解决方案
把贪婪匹配改为非贪婪匹配即可,只需要在*后加?标识非贪婪,正则表达式写为r"_.*?[0-9]+"。
示例代码
import re s = "_, _, 30, _, _, _, 50, _, _ " # 提取首个符合规则的片段 target = re.findall(r"_.*?[0-9]+", s)[0] print(target) # 输出结果:_, _, 30
补充说明
- 正则末尾加
+是为了兼容多位数场景,比如100、2024这类多位数值也能完整匹配到结尾。 - 如果需要更严谨的匹配,避免数字后出现多余字符,也可以使用正向预查限制匹配边界,正则写为
r"_.*?\d+(?=[^\d]|$)",你当前的场景用基础非贪婪写法已经可以满足需求。
内容的提问来源于stack exchange,提问作者crackjack
相关产品推荐
相关产品推荐

