Python正则表达式单词边界未按预期工作
为什么边界这个词不起作用 在阅读中,我知道单词边界是这样工作的: 有三种不同的位置可以作为单词边界:Python正则表达式单词边界未按预期工作,python,regex,Python,Regex,为什么边界这个词不起作用 在阅读中,我知道单词边界是这样工作的: 有三种不同的位置可以作为单词边界: 在字符串的第一个字符之前,如果第一个字符是单词字符 如果最后一个字符是单词字符,则在字符串中最后一个字符之后 在字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符 下面的a字符串似乎至少适合上面列出的一个位置 a = 'Builders Club The Ohio State' re.sub('\bThe\b', '', a, flags=re.IGNORECASE) 输出。“
- 在字符串的第一个字符之前,如果第一个字符是单词字符
- 如果最后一个字符是单词字符,则在字符串中最后一个字符之后
- 在字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符
a
字符串似乎至少适合上面列出的一个位置
a = 'Builders Club The Ohio State'
re.sub('\bThe\b', '', a, flags=re.IGNORECASE)
输出。“the”没有变化
'Builders Club The Ohio State'
为什么边界这个词不起作用
当我在“The”模式前后放置空格时,正则表达式似乎起作用
a = 'Builders Club The Ohio State'
re.sub(' The ', ' ', a, flags=re.IGNORECASE)
输出:
'Builders Club Ohio State'
Builders Club Ohio State
您需要为您的正则表达式模式(不处理转义序列)使用:
否则,\b
将被解释为退格字符:
>>> print('x\by')
y
>>> print(r'x\by')
x\by
>>>
试试这个
import re
p = re.compile(ur'\bThe\b', re.IGNORECASE)
test_str = u"Builders Club The Ohio State"
subst = u""
result = re.sub(p, subst, test_str)
输出:
'Builders Club Ohio State'
Builders Club Ohio State
下面是要详细说明的:反斜杠是普通字符串中的转义字符,因此\b变成了正斜杠。因此,您需要使用
\\b
或原始字符串文字。通常在使用正则表达式时,最好使用原始字符串.ah ic。如果我使用r“它会弄乱其他字符吗,比如^1和$?@user3314418不,它只影响你需要使用的反斜杠的数量(提示:你不需要原始字符串那么多)。我明白了。我尝试了正则表达式r'\b\[details\]\b'
来删除[details]在我的文本中。但是word boundary不起作用。它在没有\b
的情况下起作用,因为我没有任何包含[详细信息]作为子字符串的文本。即使我对我拥有的数据有一个解决方案,但我觉得它不是通用的。关于我的代码中发生了什么的任何建议。