2017-12-22 3 views
2

私は、文字列中のオプションの単語がどこにあるのか無視する必要がある箇所を見つけようとしています。オプションの単語をスキップするPython正規表現

私が試したコードは次のとおりです。

import re 
    str = ''' 
     topping consensus estimates 
     topping analysis' consensus estimate 
     topping estimate 
    ''' 
    for m in re.finditer(r'(?P<p3c>topping\s+(?:\w+\s(?!estimate)){0,2}(estimate))',str): 
     print(m.group()) 
    print('done') 

私は、文字列で見つかったすべての3つのケースを取得したいだけ最後を取得します。私はトッピングと推定の間に2単語までスキップしたいが、分析とコンセンサスになるとは保証できない。私は(?:\w+\s(?!estimate)){0,2}と試して結果を得るために2単語までスキップしましたが、それは何らかの理由で動作しません。

+0

「機能しない」とは何ですか?より具体的にしてください。 –

答えて

4

結果として「トッピング推定」を取得する必要はありません。あなたがの場合、実際にが欲しいのは、各行がtoppingで始まり、それに続く2ワード以下であるかどうかを確認してから、estimateまたはestimatesであるかどうかを確認することです。あなたはmをオンにした場合、それぞれの行に対してこれを

^topping(\s\S+){0,2}\sestimates?\s*$ 

マッチ、または複数行:

この正規表現がお手伝いします。文字列が要件を満たしているかどうかを示します。

+0

ありがとう、私のニーズに合うようにあなたの提案を修正する必要があったが、あなたは正しいアプローチをしている。私は彼らがテキストにどこになるのか分からないので、私はちょうどr'topping(\ s \ S +){0,2} \ sestimateを使っています。 – Pat

+0

@Pat私の答えがあなたの質問に答えると思うなら、そのチェックマークをクリックすることでそれを受け入れることを検討してください! – Sweeper

+0

@Pat定義は「もう機能しません」。あなたは何を試そうとしていますか?あなたはそれにマッチすると思いますか?実際に一致したのは何ですか? – Sweeper

関連する問題