2017-04-14 11 views
2

私は現在Python 2.7を使用しています(私は古いコードを使っています)。そして、私は正規表現を介してすべての単語を取得しようとしています。ここでは、アフストロフィーを持つ単語を無視することができます(can'tGary'sなど)。 、すべての単語を見つける:Regexのネガティブルックバック

r"(?:\s|^)([a-z]+)(?=\s|$)" 

しかし:これまでのところ私は、文字列の小文字ですべての文字を作ってきたし、ここに私の現在の正規表現です:

r"(?<=\s|^)([a-z]+)(?=\s|$)" 

私は次のエラーを取得する:

raise error, v # invalid expression

error: look-behind requires fixed-width pattern

私も試してみましたRegex101にあるように、最後の単語はキャプチャされません。

これにはもっと良い選択肢があることは知っていますが、今ではこの状況でどのように否定的な見方をするのか本当に興味があります。しかし、あなたがそれを説明し、あなた自身のよりよい解決策を提供できれば、それはうまくいって、高く評価されます。この場合

答えて

2

、ちょうど反対の文字クラス\S(同じ先読みで行うことができます)と負の後読みを使う:

r"(?<!\S)([a-z]+)(?!\S)" 

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

"正" のアプローチは、あまりきれいになります。

r"(?:(?<=\s)|^)([a-z]+)(?=\s|$)" 

another regex demoを参照してください。 (?:(?<=\s)|^)非キャプチャグループは、現在の位置の前に空白を必要とする(?<=\s)と、文字列の先頭に一致する^という2つのゼロ幅アサーションの選択肢を組み合わせています。

+0

とにかくネガを使用しないでください。私は、将来同様の問題に遭遇した場合に備えて、興味があります。 – Neil

+0

はい、きちんと見えません。 –

+0

頼むのがあまりできない場合は、偶然にも投稿できますか? – Neil

関連する問題