2011-07-08 10 views
5

私は好奇心、なぜだろう、次の出力が一致があったこと:なぜ w +が末尾の改行にマッチするのですか?

import re 

foo = 'test\n' 
match = re.search('^\w+$', foo) 

if match == None: 
    print "It did not match" 
else: 
    print "Match!" 

改行がはい、文字列の末尾の前にいるのですか?これはなぜ一致しますか?

+2

'$' "は文字列の末尾に一致する文字列の末尾に一致します*" –

答えて

8

^および$「開始文字列」および「終了文字列」ではなく、「行頭」および「行末」を意味します。 「文字列の開始」には\Aを使用し、「文字列の最後には\Z」を使用してください。

+0

Pythonでは "文字列の終わり"は '\ Z'です(Perlとは異なります。 '\ Z'と' \ z')。 – MRAB

+0

@MRABよろしく!編集されました。 –

9

Pythonのreドキュメントから。

「$」
は、文字列の末尾の文字列または単に改行の前の終わりにマッチし、MULTILINEモードでも、改行の前にマッチします。 fooは 'foo'と 'foobar'の両方に一致し、正規表現foo $は 'foo'にのみ一致します。もっと興味深いことに、 'foo1 \ nfoo2 \ n'のfoo。$を検索すると、通常は 'foo2'と一致しますが、マルチラインモードでは 'foo1'と一致します。 'foo \ n'にある$の1つを検索すると、改行の直前に1つ、文字列の最後に2つ(空の)一致が見つかります。

関連する問題