2016-03-25 4 views
0

helloという単語にマッチする正規表現を書いたければ、行を始めるか、空白を前に付けた場合にのみ入力してください。私は空白にマッチしたいとは思わないが...私はそれを知る必要がある(またはラインの開始)がある。行の先頭または空白の前にあるときにパターンにマッチするPython正規表現

だから私が試した:

r = re.compile('hello(?<=\s|^)') 

が、これはスロー:例のため

error: look-behind requires fixed-width pattern 

を、私の文字列が検索される場合は、次のとおりです。

s = 'hello world hello thello' 

私は正規表現を2回マッチさせたいと思っています...大文字の場所:

'HELLO world HELLO thello' 

最初に一致するのは行の先頭であるため、2番目の一致はスペースの前にあるためです。最後の5文字は、先頭にtがあるため一致しません。

+2

're.findall(r '\ bhello \ b'、s)'はどうでしょうか? –

+0

正規表現の文字列の前に 'r'を省略した場合、これを書いてもうまくいかないのはなぜですか? – 8one6

+0

'r'がなければ、' \ b'はバックスペース記号として扱われます。 –

答えて

3

(?:(?<=\s)|^)helloあなたが望むものになります。 lookbehindは正規表現の先頭にある必要があります。実際には固定幅である必要があります。\sは1文字幅ですが、^は0文字なので、|と組み合わせることはできません。この場合、必要はありません。(?<=\s)^を交互に使用します。

これらの両方がまだ一致することに注意してください。hello oo;これが受け入れられない場合は、末尾に\bを追加する必要があります。

関連する問題