我在python中做了一个非常简单的正则表达式,并且在使用“或”运算符时看到一些奇怪的行为。Python中的正则表达式匹配
我试图解析如下:
>> str = "blah [in brackets] stuff"
,使其返回:
>> ['blah', 'in brackets', 'stuff']
要匹配括号内的文字,我使用的外观后面,向前看,即:
>> '(?<=\[).*?(?=\])'
如果单独使用,确实可以捕获括号中的文字:
>> re.findall('(?<=\[).*?(?=\])' , str)
>> ['in brackets']
但是,当我结合或运营商来解析空间之间的字符串,支架匹配某种方式分解:
>> [x for x in re.findall('(?<=\[).*?(?=\])|.*?[, ]' , str) if x!=' ' ]
>> ['blah', '[in ', 'brackets] ']
对我的生活中,我无法理解这种行为。任何帮助,将不胜感激。
谢谢!
这可能帮助 - https://regex101.com/r/xM7sK0/1 - 左边你可以进入调试器在那里将说明如何它匹配了它所做的事情。 – TessellatingHeckler
谢谢,这真的很有用。 – FrancisWolcott
问题是正则表达式的后半部分也与括号相匹配。第一场比赛后(“blah”),剩余的文字是[括号内]。正则表达式的前半部分在这里不匹配,因为向后看不到左括号。所以正则表达式的后半部分再次匹配并找到文本“[in”。 –