re.findall的反义词是什么

时间:2019-04-27 13:20:39

标签: python regex python-2.7

我有一些代码可以查找正则表达式的出现

r"ABC E?(?P<prefix>AA) (?P<number>\d+)( n\.F\.)?(, Tz. (?P<rz>\d+)( f?f\.?)?)?"

使用re.findall可以在我的文本中获得170个匹配项的列表-似乎是有效的匹配项。

现在,我想获取文本中不匹配部分的列表,因此我使用了re.split

使用re.split会带来一个计数为1的列表-因此不会发生拆分。

我也试图解决这个问题

content = '''Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et 
    accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna 



    aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.'''

regex = r"et"

print len(re.findall(regex, content, re.MULTILINE | re.UNICODE | re.DOTALL))
print len(re.split(regex, content, re.MULTILINE | re.UNICODE | re.DOTALL))

这带来了18和19的数字,看起来更好。我认为使用更复杂的正则表达式会遇到一些问题。

希望您有任何建议。

1 个答案:

答案 0 :(得分:0)

简单的re.split不能按您想要的方式工作,因为您的正则表达式中包含捕获组。来自documentation of re.split

  

如果在模式中使用捕获括号,则模式中所有组的文本也将作为结果列表的一部分返回。

因此,一种解决方案是先用一些固定的字符/字符串替换匹配项,然后再对此进行拆分:

s = re.sub(regex, '|', content, re.MULTILINE | re.UNICODE | re.DOTALL)
s = s.split('|')