以下Python脚本:re.sub("[^a-zA-Z]pi[^a-zA-Z]", "(math.pi)", "2pi3 + supirse")
结果为:'(math.pi) + supirse'
虽然pi
之前和之后的非alpha匹配很重要,但我不希望在匹配中替换这些非alpha字符。我想看到以下输出:'2(math.pi)3 + supirse'
注意:之前的建议如下:re.sub("\Bpi\B", "(math.pi)", "2pi3 + supirse")
导致完全替换每个实例:'2(math.pi)3 + su(math.pi)rse'
这也不是我想要的
答案 0 :(得分:5)
请改用:re.sub("(?<=[^a-zA-Z])pi(?=[^a-zA-Z])", "(math.pi)", "2pi3 + supirse")
答案 1 :(得分:1)
使用lookahead / lookbehind:
import re
print re.sub("(?<=[^a-zA-Z])pi(?=[^a-zA-Z])", "(math.pi)", "2pi3 + supirse")
请参见此处了解具体结果:http://ideone.com/rSd8H
答案 2 :(得分:0)
实际上,您需要一个小写"\b"
表示字边界,而"\B"
表示不是字边界。
试试这个:
import re
re.sub(r"\bpi\b", "(math.pi)", "2pi3 + supirse")
这会产生'2pi3 + supirse'