我有以下文字:
#{king} for a ##{day}, ##{fool} for a #{lifetime}
Run Code Online (Sandbox Code Playgroud)
以下(破)正则表达式:
[^#]#{[a-z]+}
Run Code Online (Sandbox Code Playgroud)
我想匹配所有#{words}但不匹配## {words}(加倍'#'就像逃避一样).
今天我注意到我的正则表达式忽略了第一个单词(拒绝匹配#{king},但正确地忽略了## {day}和## {fool}).
>>> regex = re.compile("[^#]#{[a-z]+}")
>>> regex.findall(string)
[u' #{lifetime}']
Run Code Online (Sandbox Code Playgroud)
有关如何改进当前正则表达式以满足我的需求的任何建议吗?我猜问题是[^#]......
你必须使用"负面的lookbehind断言",正确的正则表达式看起来像这样:
import re
t = "#{king} for a ##{day}, ##{fool} for a #{lifetime}"
re.findall(r'(?<!#)#{([a-z]+)}', t)
Run Code Online (Sandbox Code Playgroud)
回报
['king', 'lifetime']
Run Code Online (Sandbox Code Playgroud)
说明:
该(?<!prefix)pattern 表达式匹配pattern,如果它不是由preceeded只prefix.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |