Python正则表达式提取文件名中被下划线/点号包裹的6位数字问题
问题原因与解决方法
错误点说明
- 正则语法错误
你写的_[0-9]{6}[_?|.]中,方括号[]是匹配单个字符的语法,里面的?、|都会被识别为普通字符而不会生效「或」逻辑,你想匹配结尾为_或.的话,直接写[_.]即可。 - 匹配消耗导致漏匹配
你现在的正则属于消耗型匹配,第一个匹配结果_249364_会把两个6位数字中间的分隔符_当成结尾字符占用,第二个6位数字200825开头的_已经被前一个匹配用掉,自然无法触发第二次匹配。
正确实现
使用零宽正向断言包裹匹配规则,不会消耗字符串中的字符,可以识别重叠位置的匹配结果,完全符合你的预期。
以Python为例代码如下:
import re f = "803611662_249364_200825.csv" result = re.findall(r'(?=(_\d{6}[_.]))', f) print(result)
运行输出:
['_249364_', '_200825.']
内容的提问来源于stack exchange,提问作者Dizzy2510
相关产品推荐
相关产品推荐

