Python正则表达式的单词边界未按预期工作

7 投票
2 回答
7652 浏览
提问于 2025-04-18 13:26

为什么单词边界不起作用呢?

根据我在这个网站上看到的,单词边界的工作原理是这样的:

单词边界有三种不同的位置:

  • 在字符串的第一个字符之前,如果第一个字符是一个单词字符。
  • 在字符串的最后一个字符之后,如果最后一个字符是一个单词字符。
  • 在字符串中两个字符之间,其中一个是单词字符,另一个不是单词字符。

下面的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'

2 个回答

2

试试这个

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

这里有一个示例

25

你需要使用一种叫做原始字符串的格式来写你的正则表达式(这样它就不会处理那些转义字符了):

>>> import re
>>> a = 'Builders Club The Ohio State'
>>> re.sub(r'\bThe\b', '', a, flags=re.IGNORECASE)
'Builders Club  Ohio State'
>>>

否则,\b会被当作一个退格符来理解:

>>> print('x\by')
y
>>> print(r'x\by')
x\by
>>>

撰写回答