如何在使用单词边界时忽略特殊字符

时间:2015-03-17 05:22:22

标签: python regex

s = '!sopa !sop !sopaa !sopii'

使用字边界时如何忽略!

re.sub(r'\b\!sop\b', 'sopa', s)

输出:'!sopa !sop !sopaa !sopii'

3 个答案:

答案 0 :(得分:2)

好像你想要这样的东西。

>>> s = '!sopa !sop !sopaa !sopii'
>>> re.sub(r'\B!sop\b', 'sopa', s)
'!sopa sopa !sopaa !sopii'

您的正则表达式会失败,因为\b符号之前没有!实际退出。也就是说,从上面开始,只有当!符号前面有非单词字符时,才会尝试匹配\b符号。 \B匹配单词char和非单词字符,反之亦然。 \B匹配两个单词和两个非单词字符。此处!在空格和{{1}}之间存在,因为两者都是非单词字符。

答案 1 :(得分:1)

(?:^|(?<= ))!sop\b

你可以简单地使用它。参见演示。

https://regex101.com/r/bW3aR1/12#python

re.sub(r'(?:^|(?<= ))!sop\b', 'sopa', s)

用于动态字符串使用

replace = 'sop'
s = '!sopa !sop !sopaa !sopii'

print re.sub(r"(?:^|(?<= ))!" +replace +r"\b", "new", s)

答案 2 :(得分:-1)

搜索非字母数字字符并替换为空格:

re.sub('\W+',' ',s)

'sopa sopa sopa sopa'

相关问题