Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式单词边界未按预期工作_Python_Regex - Fatal编程技术网

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
的情况下起作用,因为我没有任何包含[详细信息]作为子字符串的文本。即使我对我拥有的数据有一个解决方案,但我觉得它不是通用的。关于我的代码中发生了什么的任何建议。