使用re.search和re.escape搜索具有特殊字符的文本时的奇怪行为

时间:2019-04-04 09:21:45

标签: python regex

这可能是一个非常简单的问题,已经回答但无法在线找到解决方案。

我正在尝试以下代码来搜索有效的单词foo

import re
haystack = 'bar foo, foo is a foobar'
needle = 'foo'
[m.start() for m in re.finditer(r'\b{}\b'.format(re.escape(needle)), haystack)]
# [4, 9]

在执行以下操作时,搜索foo,(注意逗号)并不能达到我的期望:

import re
haystack = 'bar foo, foo is a foobar'
needle = 'foo,'
[m.start() for m in re.finditer(r'\b{}\b'.format(re.escape(needle)), haystack)]
# []

怎么回事,如何搜索带有特殊字符的字符串(通常,不是上面报告的特定情况)?

谢谢

1 个答案:

答案 0 :(得分:-1)

您正在foo,中搜索单词边界(\b等同于(^\w|\w$|\W\w|\w\W))。但是,', '不是单词边界,因为,不是单词(\w)。 Here is the detailed explanation of your regular expression

您可以使用例如:

r'\bfoo,(?!\w)'

如果下一个字符不是单词\w,则匹配该字符,并使用否定的(?! )