2017-04-21 1 views
1

私は正規表現を単語と単語の範囲で指定します。例えば正規表現を作成して少なくとも所定の間隔を認識させる

pattern = 'word \\w+ \\w+ \\w+" 
result = [text[match.start():match.end()] for match in re.finditer(pattern, text)] 

区間でも、それを認識することの要素の数が少ないがある場合になるようにどのように正規表現を修正するだろうか?たとえば、単語が文字列の最後にある場合は、その間隔も返すようにしたいと思います。

可能な限り、可能な限り大きなパターンを返すようにしてください。

+2

入力例を入力して一致/出力したいものがあれば、非常に役に立ちます。 – Vallentin

+1

これは '\\ w +'を3回探すことを意味しますか?それをどのように変更して3つ以下を見つけるか?何を試しましたか? – doctorlove

+0

're.findall(r :(?:\ s + \ w +){0,3} '、s)' –

答えて

1

あなたの'word \\w+ \\w+ \\w+"正規表現はwordにマッチし、さらに3つの "単語"(スペースで区切られています)に一致します。あなたはこれらの単語の0から3をマッチさせたいと思う。

re.findall(r'word(?:\W+\w+){0,3}', s) 

詳細\W\sを置き換える、

re.findall(r'word(?:\s+\w+){0,3}', s) 

かは、 "言葉" の間でいかなる非単語の文字を許可するために使用

  • wordを - word文字列
  • -
  • (?:\s+\w+){0,3}の0~3配列({0,3}limiting quantifierの貪欲なバージョンであり、それは、できるだけ多くの出現と一致します):
    • \s+ - 1+空白
    • \w+ - 1以上の単語文字。

regex demoを参照してください。

+0

が必要でしょうか?句読点も認識できるように、どうすれば修正できますか?考え方は、単語が間隔で決まるテキスト部分を決定することです。 – Harold

+0

'r'word(?:\ W + \ w +){0,3} '' –

関連する問題