使用正则表达式在句子中查找单词

时间:2013-10-29 14:21:27

标签: python regex python-2.7

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

Str1 = "1. how are you doing"

并且我有兴趣找到

Str2 = "1."

就在里面。如果我这样做,

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

应该说发现了一场比赛,不是吗?但re.search对此查询失败。为什么呢?

1 个答案:

答案 0 :(得分:6)

这里有两件事是错的:

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

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

  2. 您正在递送re 1.,这意味着'匹配1和任何其他角色'。您需要使用re.escape()来匹配字面.来转义点。

  3. 以下效果更好:

    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. '