>>> import re
>>> s = "start foo end"
>>> s = re.sub("foo", "replaced", s)
>>> s
'start replaced end'
>>> s = re.sub("(?<= )(.+)(?= )", lambda m: "can use a callable for the %s text too" % m.group(1), s)
>>> s
'start can use a callable for the replaced text too end'
>>> help(re.sub)
Help on function sub in module re:
sub(pattern, repl, string, count=0)
Return the string obtained by replacing the leftmost
non-overlapping occurrences of the pattern in string by the
replacement repl. repl can be either a string or a callable;
if a callable, it's passed the match object and must return
a replacement string to be used.
简而言之,您不能在lookbehinds中使用使用Python的
re
模块的变宽模式。无法更改:这意味着您需要解决它,最简单的解决方案与您现在所做的非常相似:
这并没有lookbehind解决方案的优雅之处,但它仍然是一个非常清晰、直接的单行代码。如果你看看an expert has to say on the matter(他说的是JavaScript,它完全没有lookbehind,但是许多原则是相同的),你会发现他最简单的解决方案看起来很像这个。
在Pythonre documentation中查找lookaheads
(?=...)
和lookbehinds(?<=...)
——我很确定它们是您想要的。它们匹配字符串,但不会“消耗”它们匹配的字符串位。相关问题 更多 >
编程相关推荐