检索#{}内的文本

And*_*anu 5 python regex

我有以下文字:

#{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)

有关如何改进当前正则表达式以满足我的需求的任何建议吗?我猜问题是[^#]......

mde*_*ous 6

你必须使用"负面的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.