正则表达式匹配除字符串以外的所有

ste*_*nci 4 python regex

我需要找到匹配模式的所有字符串,但两个给定的字符串除外.

例如,查找除aa和的例外的所有字母组bb.从这个字符串开始:

-a-bc-aa-def-bb-ghij-
Run Code Online (Sandbox Code Playgroud)

应该返回:

('a', 'bc', 'def', 'ghij')
Run Code Online (Sandbox Code Playgroud)

我尝试使用这个捕获4个字符串的正则表达式.我以为我已经接近了,但(1)它在Python中不起作用,(2)我无法弄清楚如何从搜索中排除一些字符串.(是的,我可以在以后删除它们,但我真实的正则表达式一次性完成所有操作,我想在其中包含最后一步.)

我说它在Python中不起作用,因为我试过这个,期望完全相同的结果,但我得到的只是第一组:

>>> import re
>>> re.search('-(\w.*?)(?=-)', '-a-bc-def-ghij-').groups()
('a',)
Run Code Online (Sandbox Code Playgroud)

我试着用负面向前看,但我找不到适合这种情况的解决方案.

nu1*_*73R 6

你可以利用负面展望.

例如,

>>> re.findall(r'-(?!aa|bb)([^-]+)', string)
['a', 'bc', 'def', 'ghij']
Run Code Online (Sandbox Code Playgroud)
  • - 火柴 -

  • (?!aa|bb)否定前瞻,检查是否-没有aabb

  • ([^-]+) 匹配ony或更多字符 -


编辑

上面的正则表达式与那些以aa或开头的正则表达式不匹配bb,例如-aabc-.为了照顾我们,我们可以添加-到前瞻,如,

>>> re.findall(r'-(?!aa-|bb-)([^-]+)', string)
Run Code Online (Sandbox Code Playgroud)