re.searchとre.matchの違いは何ですか?質問する

re.searchとre.matchの違いは何ですか?質問する

Python モジュールの関数search()と関数の違いは何ですか?match()re

私は読んだPython 2 ドキュメントPython 3 ドキュメント)、でも、全然覚えていないようです。

ベストアンサー1

re.match^文字列の先頭に固定されます。これは改行とは関係がないので、パターンで使用するのとは異なります。

としてre.match ドキュメント言う:

文字列の先頭の 0 個以上の文字が正規表現パターンと一致する場合、対応するMatchObjectインスタンスを返します。None文字列がパターンと一致しない場合は を返します。これは長さが 0 の一致とは異なることに注意してください。

注: 文字列内の任意の場所に一致を検索する場合は、search()代わりに を使用します。

re.search文字列全体を検索します。文書にはこう書かれている:

文字列をスキャンして、正規表現パターンが一致する場所を探し、対応するMatchObjectインスタンスを返します。None文字列内のどの位置もパターンと一致しない場合は を返します。これは、文字列内のある時点で長さがゼロの一致を見つけることとは異なることに注意してください。

したがって、文字列の先頭で一致させる必要がある場合、または文字列全体を一致させる必要がある場合は、matchを使用します。その方が高速です。それ以外の場合は、 を使用しますsearch

ドキュメントにはmatchvs.の特定のセクション。search複数行の文字列もカバーします。

Python は、正規表現に基づく 2 つの異なる基本操作を提供します。は文字列の先頭のみのmatch一致をチェックし、 は文字列内の任意の場所での一致をチェックします(これは Perl のデフォルトの動作です)。search

:で始まる正規表現を使用する場合でも、matchは と異なる場合があることに注意してください。 :は、文字列の先頭にのみ一致し、モードでは改行の直後にも一致します。 “ ” 操作は、モードに関係なく、パターンが文字列の先頭に一致する場合、または、その前に改行があるかどうかに関係なく、オプションの引数で指定された開始位置に一致する場合にのみ成功します。search'^''^'MULTILINEmatchpos

さて、話はこれくらいにして、サンプルコードを見てみましょう。

# example code:
string_with_newlines = """something
someotherthing"""

import re

print re.match('some', string_with_newlines) # matches
print re.match('someother', 
               string_with_newlines) # won't match
print re.match('^someother', string_with_newlines, 
               re.MULTILINE) # also won't match
print re.search('someother', 
                string_with_newlines) # finds something
print re.search('^someother', string_with_newlines, 
                re.MULTILINE) # also finds something

m = re.compile('thing$', re.MULTILINE)

print m.match(string_with_newlines) # no match
print m.match(string_with_newlines, pos=4) # matches
print m.search(string_with_newlines, 
               re.MULTILINE) # also matches

おすすめ記事