import re
text = 'washington d.c. columbia'
templ_1 = 'washington d.c'
templ_2 = 'washington d.c.'
print(re.sub(r'\b%s\b'%templ_1, '', text))
我得到了. columbia
正如预期的那样
print(re.sub(r'\b%s\b'%templ_2, '', text))
我得到了washington d.c. columbia
而不是. columbia
如何修复它
Tags:
词界是从词到非词或从非词到词的过渡
在您的例子中,您修复了基于下一个文本的转换
到边界构造
\b
在第一个正则表达式中,它的
\bwashington d.c\b
意思是在
c
后面,它需要一个非单词在第二个正则表达式中,它的
\bwashington d.c.\b
在这种情况下,
.
后面的含义在找到之前是未定义的 元字符点表示的字符。
在本例中,它在目标中找到一个文本点
.
,然后找到边界期望下一个字符是单词
因此,在第二种情况下,目标在点之后有一个空格,即
一个字也没有。因此,没有匹配
\b
描述从单词字符到非单词字符的转换。一个.
后跟一个is not such a transition (neither is a word character). In addition, you need to
re.escape
您的字符串被添加到正则表达式中,或者.
将匹配任何字符,而不是文字.
可能的解决方法是:
使用lookahead断言,您的模式后面是空格或字符串的结尾,而不是单词边界(因为您的模式可能不会以单词字符结尾)。用
\W
代替\s
也是合理的相关问题 更多 >
编程相关推荐