【发布时间】:2017-08-09 02:13:38
【问题描述】:
我正在寻找一种模式。我写了以下代码:
string = '000,001,100,001'
pattern = '(.*)00(.*),(.*)00(.*)'
for m in re.finditer(pattern, string):
print(m.groups())
上面的代码返回 ('000,001,1', '', '', '1'),因为它错过了与组的匹配 ('', '0', '', '1,100,001')
我正在尝试锻炼连续行上“00”之前和之后的字符是否相同。我写的代码匹配 '000,001,100,001'。如何匹配 '000,001,100,001'。
后期如何获取匹配组?
【问题讨论】:
-
那是因为克林星是贪婪的。如果你使用
.*?,它是non-greedy。 -
@WillemVanOnsem 如何包含贪婪和非贪婪结果。贪婪和非贪婪之间的匹配呢?
-
@WillemVanOnsem 表达式 r"(.*?)00(.*),(.*?)00(.*)", r"(.*?)00(.*),( .*)00(.*)", r"(.*)00(.*),(.*)00(.*)", r"(.*?)00(.*),(.*? )00(.*)" 都产生不同的匹配。如何迭代它们。所需的输出组是在它们之后和之前具有相同数量的字母的那些,它们是 ('0', '', '0', '') 和 ('', '0', '', '0' )