我刚刚做了
strn="india pp "
strn_n=re.sub('\\bp{2}\\b',' and ',strn)
print strn_n
我的输出是印度和 - 按预期工作
但是当我尝试
时strn="india && "
strn_n=re.sub('\\b\&{2}\\b',' and ',strn)
print strn_n
我期待着印度和[自从&&&应该被替换]
但没有像我预期的那样找到它。
有人可以指出为什么边界标记在我的第一个例子中使用普通字符时,\&
不能使用边框标记
答案 0 :(得分:2)
\b
在字边界(^\w|\w$|\W\w|\w\W)
处断言位置,因此引擎无法在第二个示例中与\b&\b
匹配。
您可以使用lookarounds通过匹配未跟随任何非空白字符的&&
来实现您想要的目标,而不是以一个字符开头:
(?<!\S)&&(?!\S)
注意:您不需要逃避&
字符,它没有任何特殊的正则表达式含义,\b
就足够了,不需要双重转义。< / p>
答案 1 :(得分:1)
\b
不会将非单词字符与&
匹配,您可以使用\W
代替:
strn_n=re.sub('\W&{2}\W',' and ',strn)