使用正则表达式搜索单词的开头

时间:2011-07-19 11:06:09

标签: python regex

如何编写正则表达式,我们可以找到由指定字符串启动的所有单词。对于前 -

a = "asasasa sasDRasas dr.klklkl DR.klklklkl Dr klklklkklkl"

在这里,我想使用ignorecase获取所有以dr开头的单词。我试过但是所有的函数结果都是dr在单词中找不到单词的开头。

提前致谢。

3 个答案:

答案 0 :(得分:5)

您可以使用\b查找字边界,使用re.IGNORECASE标记进行不区分大小写搜索。

import re

a = "asasasa sasDRasas dr.klklkl DR.klklklkl Dr klklklkklkl"
for match in re.finditer(r'\bdr', a, re.IGNORECASE):
    print 'Found match: "{0}" at position {1}'.format(match.group(0), match.start())

这将输出:

Found match: "dr" at position 18
Found match: "DR" at position 28
Found match: "Dr" at position 40

此处,模式\bdr dr 匹配,但前提是在单词的开头找到它。这也将为驾驶等字符串产生匹配。如果您只想将 dr 作为唯一字词,请使用\bdr\b

我使用re.finditer()扫描搜索字符串,并在循环中产生 dr 的每个匹配项。 re.IGNORECASE标记使dr也匹配DRDrdR

答案 1 :(得分:1)

@Ferdinand Beyer's answer显示了如何通过正则表达式执行此操作。但您可以使用字符串函数轻松实现:

>>> a
'asasasa sasDRasas dr.klklkl DR.klklklkl Dr klklklkklkl'
>>> cleaned = "".join(" " if i in string.punctuation else i for i in a)
>>> cleaned
'asasasa sasDRasas dr klklkl DR klklklkl Dr klklklkklkl'
>>> [word for word in cleaned.split() if word.lower().startswith("dr")]
['dr', 'DR', 'Dr']

答案 2 :(得分:0)

>>> string_to_search_in
'this a a dr.seuse dr.brown dr. oz dr noone'
>>> re.compile('\b*?dr.?\s*?\w+', re.IGNORECASE).findall(string_to_search_in)
['dr.seuse', 'dr.brown', 'dr. oz', 'dr noone']