2017-07-19 22 views
6

私はPythonで正規表現でかなり単純なことをしようとしています... thats私は少なくとも思ったものです。正規表現:空白の間の一致する単語

私がしたいことは、文字列の前と後に空白がある場合は、文字列の単語を一致させることです。文字列の先頭に空白がない場合は、最後に空白も探しません。

例:

"WordA WordB WordC-WordD WordE" 

私はWordA WordB WordEを一致させたいです。私はこれを行うためのovercomplicated方法を思いついた

...

(?<=(?<=^)|(?<=\s))\w+(?=(?=\s)|(?=$)) 

このような単純な問題のための簡単な方法がなければならない私には思える.... 私はちょうどすることができます考え出し(?<=\s|^)で始まりますが、それは "見え方が固定幅のパターンを必要とする"ため可能ではないようです。

答えて

6

(?<=^|\s)はPCRE、Java、Ruby(そして.NET正規表現では無限幅のルックバックパターンをサポートしています)で完全に有効であるため、Pythonで動作するようです。

使用

(?<!\S)\w+(?!\S) 

それは空白で囲まれている1つの以上の単語の文字に一致するか、文字列の開始/終了します。

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

パターンはの詳細:

  • (?<!\S)から1以上の単語 - エンジンは、現在の位置
  • \w+のすぐ左に非空白文字を見つけると一致に失敗負後読みをchars
  • (?!\S) - エンジンが現在の場所のすぐ右に空白以外の文字を見つけたら否定的なルックアヘッド。
+0

これは意味があります!ありがとう。私は、空白ではなく非空白を検索する方がずっと簡単だと思います。 – SyntaxError

+0

これは簡単ですが、より効率的です。 –

関連する問題