繁体   English   中英

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

[英]find a word in a sentence using regular expression

因此,我试图在一个句子中找到一个词(完整的词)。 可以说这句话是

Str1 = "1. how are you doing"

而且我有兴趣寻找是否

Str2 = "1."

在里面。 如果我做,

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

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

这里有两件事是错误的:

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

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

  2. 您正在移交re一个1. ,这意味着“匹配1和任何其它字符”。 您需要使用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. '

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM