我需要找到匹配模式的所有字符串,但两个给定的字符串除外.
例如,查找除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)
我试着用负面向前看,但我找不到适合这种情况的解决方案.
你可以利用负面展望.
例如,
>>> re.findall(r'-(?!aa|bb)([^-]+)', string)
['a', 'bc', 'def', 'ghij']
Run Code Online (Sandbox Code Playgroud)
- 火柴 -
(?!aa|bb)否定前瞻,检查是否-没有aa或bb
([^-]+) 匹配ony或更多字符 -
编辑
上面的正则表达式与那些以aa或开头的正则表达式不匹配bb,例如-aabc-.为了照顾我们,我们可以添加-到前瞻,如,
>>> re.findall(r'-(?!aa-|bb-)([^-]+)', string)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |