2011-07-19 24 views
1

正規表現を書く方法。指定された文字列で始まるすべての単語を見つける方法。ここEX-正規表現を使用して単語の先頭を検索する

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

のために私はIGNORECASEを使っ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パターンが、それは、単語の開始時に発見された場合にのみ。これにより、の駆動のような文字列の一致も得られます。 drをユニークワードとして検索する場合は、\bdr\bを使用してください。

私はre.finditer()を使用して検索文字列をスキャンし、drのすべての一致をループで返します。 re.IGNORECASEフラグは、drDR,DrおよびdRに一致します。

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'] 
関連する問題