2011-07-19 49 views
1

如何編寫正則表達式,我們可以找到由指定字符串開始的所有單詞。爲前使用正則表達式搜索單詞的開始

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

在這裏我要取的是通過dr使用忽略開始的所有單詞。我試過,但所有功能的結果,其中dr在單詞中找不到單詞的開頭。

在此先感謝。

+0

「我嘗試」 - 我們能看到嗎? – eumiro

回答

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作爲唯一字,請使用\bdr\b

我使用re.finditer()掃描搜索字符串,並在循環中產生dr的每個匹配項。 re.IGNORECASE標誌導致dr也匹配DR,DrdR

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