Pythonの正規表現について質問があります。Pythonの正規表現に関する情報はあまりありません。私はHTTPリクエストメッセージを処理していて、それらを正規表現で解析しています。ご存知のように、HTTPGETメッセージはこの形式です。
GET / HTTP/1.0
User-Agent: Wget/1.12 (linux-gnu)
Accept: */*
Host: 10.2.0.12
Connection: Keep-Alive
メッセージのURI、メソッド、ユーザーエージェント、およびホスト領域を解析したいと思います。この仕事の私の正規表現は次のとおりです。
r'^({0})\s+(\S+)\s+[^\n]*$\n.*^User-Agent:\s*(\S+)[^\n]*$\n.*^Host:\s*(\S+)[^\n]*$\n'.format('|'.join(methods)), re.MULTILINE|re.DOTALL)
しかし、メッセージが次のように出てくるとき
GET / HTTP/1.0
Host: 10.2.0.12
User-Agent: Wget/1.12 (linux-gnu)
Accept: */*
Connection: Keep-Alive
ホストの場所が原因で、またはユーザーエージェントが変更されたため、それらをキャッチできません。したがって、メッセージ内でhost、method、uriの場所が変更された場合でも、それらすべてをキャッチする汎用正規表現が必要です。