2016-12-21 15 views
-4

Pythonの正規表現について少し混乱しています。具体的には、なぜ次の行はTrueを返しますか?Python正規表現の改行エスケープ文字

コード:bool(re.search(r'ab\n^c$', 'ab\nc'))

+1

'^'と '$'正規表現で特別な意味を持っています。私は正規表現についていくつかの研究をすることをお勧めします。 – TigerhawkT3

答えて

2

$は、文字列の末尾にマッチするので、cは終わりである必要があります。ただし、一致する文字列はc$で終わります。次に^も含まれています。これは開始の文字列に一致しますが、式の途中に配置します。

どちらの脱出^$ので、彼らはリテラルと一致、または^試合re.MULTILINE flagとテキストの各行の開始を行い、一致するテキストから^$を削除します。

デモ:

>>> import re 
>>> bool(re.search(r'ab\n\^c\$', 'ab\n^c$')) # escaped 
True 
>>> # multiline and target text adjusted 
... 
>>> bool(re.search(r'ab\n^c$', 'ab\nc', flags=re.MULTILINE)) 
True 
+0

ありがとうございます。しかし、私もこの行を試しました:bool(re.search(r'ab \ n^c $ '、' ab \ nc '))、結果はまだFalseです。つまり、文字列の2番目の行は単なる 'c'であり、一致する必要があります。 – larrybr

+0

私はすでに私の答えでそれに対処しています。 '^'はあなたが 're.MULTILINE'フラグを使って動作を具体的に切り替える場合を除き、すべての行の先頭ではなく*絶対開始*にマッチします。 –

+0

ああ、そうだ。ご協力いただきありがとうございます! – larrybr

関連する問題