2

所以,我试图在一个句子中找到一个单词(一个完整的单词)。让我们说这句话是

Str1 = "1. how are you doing"

我有兴趣找到

Str2 = "1."

在里面。如果我做,

re.search(r"%s\b" % Str2, Str1, re.IGNORECASE)

它应该说找到了匹配项,不是吗?但re.search此查询失败。为什么?

4

1 回答 1

6

这里有两点不对:

  1. \b匹配单词和非单词字符之间的位置,因此匹配任何字母、数字或下划线以及与该集合不匹配的字符。

    您正在尝试匹配 a.和空格之间的边界;两者都是非单词字符,并且\b锚永远不会在那里匹配。

  2. 您正在处理rea 1.,这意味着“匹配 a1和任何其他字符”。您需要使用re.escape()匹配文字来转义点.

以下效果更好:

re.search(r"%s(?:\s|$)" % re.escape(Str2), Str1, re.IGNORECASE)

现在它将按字面意思匹配您的输入,并查找后面的空格或字符串的结尾。(?:...)创建一个非捕获组(除非您特别需要捕获匹配的部分,否则始终是一个好主意);组内有一个|管道可以提供两种选择;匹配\s(空白)或匹配$(行尾)。您可以根据需要扩展它。

演示:

>>> import re
>>> Str1 = "1. how are you doing"
>>> Str2 = "1."
>>> re.search(r"%s(?:\s|$)" % re.escape(Str2), Str1, re.IGNORECASE)
<_sre.SRE_Match object at 0x10457eed0>
>>> _.group(0)
'1. '
于 2013-10-29T14:26:30.107 回答