2016-12-06 10 views
0

私は外部ファイルから、ユーザが入力した式とそれを囲む5つの単語(可能な限り柔軟なもの)を見つけようとしています。私は、問題は、実際のコードではないことを知っているPythonで正規表現を完成する時間を短縮

exp='(?:(.+)?\w+(.+)?){5}' 
find=input("What would you like to find?") 
exp+=find 
exp+='(?:(.+)?\w+(.+)?){5}' 

:しかし、5つの単語を見つけるために正規表現は

'(?:(.+)?\w+(.+)?){5}' 

だから私が使用している式を作成するために完了するために、はるかに時間がかかりすぎています.20{}のような式を使用するとうまく動作するためです。

+0

あなたの文字列はどのくらいですか? – user312016

+0

@ user312016私が探しているものはたいてい単なる単語です –

+0

5単語にマッチさせるには '(\ b \ w + \ b){5}'を使いますか? – Skycc

答えて

0

あなたがラインを見つけたら、それはまず、その後の言葉を得るには言葉を持っているラインを見つけることがはるかに高速になります。

現在、あなたは5ワード要件のためにはるかに長い文字列を比較するために抱えています。

だからちょうどその(あなたがする必要がある場合でも、ここに正規表現を使用して)周囲の要素を解析し、単語を見つけます。

+0

さて、どうしたらいいの?申し訳ありません、私はこの初心者のビットです –

+0

@ E.Asquith - 'word in line'?大量の一括文字列を使用するのではなく、行単位でファイルを処理していると仮定します。 – Sayse

0

正規表現の代わりに、通常の文字列操作を使用する必要があります。

wordPos = fileContent.find(userInput) 
wordAmount = 5 
extractionBegin = wordPos 
for i in range(wordAmount + 1): 
    extractionBegin = fileContent.rfind(' ', extractionBegin) 
extractionEnd = wordPos 
for i in range(wordAmount + 1): 
    extractionEnd = fileContent.find(' ', extractionEnd) 
print fileContent[extractionBegin:extractionEnd] 
関連する問題