如何编写正则表达式,我们可以找到由指定字符串启动的所有单词。对于前 -
a = "asasasa sasDRasas dr.klklkl DR.klklklkl Dr klklklkklkl"
在这里,我想使用ignorecase获取所有以dr
开头的单词。我试过但是所有的函数结果都是dr
在单词中找不到单词的开头。
提前致谢。
答案 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
也匹配DR
,Dr
和dR
。
答案 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']