これら2つの正規表現があるとしましょう:
id=123456
discography=True
入力内のこれらの文字列の順序を事前に知らなくても、両方が正規表現に一致するかどうかを確認するにはどうすればよいですか?
2つの先読みを使用できます:
^(?=.*id=123456)(?=.*discography=True)
文字列()の先頭から、最初にどこか^
を探します( )。ただし、先読みは実際には何も消費しないため、パターンが見つかると、エンジンは開始位置(文字列の先頭)に戻り、2番目のパターンで開始します。id=123456
.*
eyquemが指摘しているように、文字列に改行がある.*
場合、オプションre.S
(またはre.DOTALL
-これは単なるエイリアス)を使用しない限り、改行を通過することはできません。
ただし、これはURLのクエリ文字列を解析しようとしているように見えます。多分あなたは見ておくべきですurlparse
。
r1とr2が整形式の正規表現であると仮定すると、次のことができます。
re.compile("(?=%s)%s" % (r1, r2))
最初と 2 番目の正規表現の独立したチェックを探している場合は、正規表現に結果があるかどうかをチェックすることで機能するはずです。
import re
results1 = re.search("id=([0-9]+)", "id=123456")
results2 = re.search("discography=(True|False)", "discography=True")
if results1 != None and results2 != None:
print "Both matched"