Python边界标签和\&符号没有找到我的字符串匹配

时间:2016-12-18 08:23:11

标签: python regex

我刚刚做了

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

我期待着印度和[自从&&&应该被替换]

但没有像我预期的那样找到它。

有人可以指出为什么边界标记在我的第一个例子中使用普通字符时,\&不能使用边框标记

2 个答案:

答案 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)