ホームページ >バックエンド開発 >Python チュートリアル >文字列をPythonの正規表現と一致させるにはどうすればよいですか?

文字列をPythonの正規表現と一致させるにはどうすればよいですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-06-13 15:49:2111123ブラウズ

文字列をPythonの正規表現と一致させるにはどうすればよいですか?

#文字列を Python 正規表現と照合するにはどうすればよいですか?

Python 正規表現で文字列を照合する方法:

1. 単一位置での文字列照合

この場合、次のことができます。この (. ?) 正規表現を使用して抽出します。たとえば、文字列「a123b」の場合、ab 間の値 123 を抽出したい場合は、正規表現とともに findall を使用できます。これにより、シチュエーション リストに一致する文字列が返されます。 、コードは次のとおりです。

import re
str = "a123b"
print re.findall(r"a(.+?)b",str)#
输出['123']

1.1 貪欲なマッチングと非貪欲なマッチング

文字列「a123b456b」がある場合、a と最後の間のすべての値を一致させたい場合a と b の最初の出現の間の値を使用して、通常の貪欲なマッチングと非貪欲なマッチングを制御できます。コードは次のとおりです:

import re
str = "a123b456b"
print re.findall(r"a(.+?)b", str)
#输出['123']#?控制只匹配0或1个,所以只会输出和最近的b之间的匹配情况
print re.findall(r"a(.+)b", str)
#输出['123b456']
print re.findall(r"a(.*)b", str)
#输出['123b456']

1.2 複数行のマッチング

複数の行を一致させたい場合は、re.S フラグと re.M フラグを追加する必要があります。re.S を追加すると、. は改行に一致します。デフォルトでは、改行は一致しません。コードは次のとおりです:

str = "a23b\na34b"
re.findall(r"a(\d+)b.+a(\d+)b", str)
#输出[]
#因为不能处理str中间有\n换行的情况
re.findall(r"a(\d+)b.+a(\d+)b", str, re.S)
#s输出[('23', '34')]

Add re.M を追加すると、^$ マークが各行に一致します。デフォルトでは、^ と $ は最初の行のみに一致します。コードは次のとおりです:

str = "a23b\na34b"
re.findall(r"^a(\d+)b", str)
#输出['23']
re.findall(r"^a(\d+)b", str, re.M)
#输出['23', '34']

2。複数の連続する位置にある文字列と一致する

この場合、正規表現 (?P8a11bc632ea32a57b3e3693c7987c420...) を使用して抽出できます。たとえば、Web サーバーのアクセス ログの行が「192.168.」であるとします。 0.1 25/Oct/2012:14:46:34 " GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"'、このログ内のすべてのコンテンツを抽出したい1行に(?P8a11bc632ea32a57b3e3693c7987c420expr)を複数記述して抽出する場合、nameをその位置の文字列に名前を付けた変数に変更し、exprを抽出位置の正規表現に変更することができます。コードは次のようになります。

import re
line ='192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" 
"Mozilla/5.0"'
reg = re.compile(&#39;^(?P<remote_ip>[^ ]*) (?P<date>[^ ]*) "(?P<request>[^"]*)" 
(?P<status>[^ ]*) (?P<size>[^ ]*) "(?P<referrer>[^"]*)" "(?P<user_agent>[^"]*)"&#39;)
regMatch = reg.match(line)
linebits = regMatch.groupdict()
print linebits
for k, v in linebits.items() :
    print k+": "+v

出力結果は次のとおりです:

status: 200
referrer:  
request: GET /api HTTP/1.1
user_agent: Mozilla/5.0
date: 25/Oct/2012:14:46:34size: 44
remote_ip: 192.168.0.1

推奨チュートリアル: "Python ビデオ チュートリアル "

以上が文字列をPythonの正規表現と一致させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。