【发布时间】:2020-10-26 19:59:13
【问题描述】:
Python 3.8.2
手头的任务很简单:匹配由单个下划线分隔的小写字符。所以模式可能是r"[a-z]+_[a-z]+"
现在我的问题是我希望 re.findall() 将以下所有内容配对:
“ash_tonic_transit_so_kern_err_looo_”
我没有将每个下划线周围的所有单词('ash_tonic'、'tonic_transit'、'transit_so'、ETC)都删掉,而是得到三对:['ash_tonic'、'transit_so'、'kern_err']
一旦找到匹配项,python 是否会重新省略部分字符串,而不是再次运行搜索?
import re
def match_lower(s):
patternRegex = re.compile(r'[a-z]+_[a-z]+')
mo = patternRegex.findall(s)
return mo
print(match_lower('ash_tonic_transit_so_kern_err_looo_'))
【问题讨论】:
-
重新模块不会进行部分重新匹配,一旦你匹配了字符串之外的东西。
-
这就是 all 正则表达式风格的工作方式 - 您已经指定(简化)
[a-z]_[a-z]所以从a_b_c_d它将匹配a_b,一旦使用,正则表达式将继续从那里。 -
您可以在前瞻
(?=(?<![a-z])([a-z]+_[a-z]+))regex101.com/r/VW7BKW/1 内使用带有负后瞻的捕获组 -
@Thefourthbird 有趣的是,我从没想过lookbehinds/lookaheads可以嵌套。直到。