Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man eine Zeichenfolge mit einem regulären Python-Ausdruck abgleichen?

Wie kann man eine Zeichenfolge mit einem regulären Python-Ausdruck abgleichen?

coldplay.xixi
coldplay.xixiOriginal
2020-06-13 15:49:2111121Durchsuche

Wie kann man eine Zeichenfolge mit einem regulären Python-Ausdruck abgleichen?

Wie vergleiche ich eine Zeichenfolge mit einem regulären Python-Ausdruck?

So gleichen Sie Zeichenfolgen mit regulären Python-Ausdrücken ab:

1. Zeichenfolgenabgleich an einer einzelnen Position

In diesem Fall können Sie Verwenden Sie diesen regulären Ausdruck (.+?), um beispielsweise eine Zeichenfolge „a123b“ zu extrahieren. Wenn wir den Wert 123 zwischen ab extrahieren möchten, können wir findall mit dem regulären Ausdruck verwenden, der eine Zeichenfolge zurückgibt, die übereinstimmt In der Situationsliste lautet der Code wie folgt:

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

1.1 Gieriger und nicht gieriger Abgleich

Wenn wir eine Zeichenfolge „a123b456b“ haben, wenn wir alle Werte zwischen a abgleichen möchten und das letzte b und Der Wert zwischen Nicht-a und dem ersten Vorkommen von b kann zur Steuerung des regulären gierigen und nicht gierigen Abgleichs verwendet werden. Der Code lautet wie folgt:

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 Mehrzeiliger Abgleich

Um mehrere Zeilen abzugleichen, müssen Sie die Flags re.S und re.M hinzufügen. Standardmäßig stimmt der Code nicht überein wie folgt:

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')]

Nach dem Hinzufügen von re.M stimmt die Markierung ^$ mit jeder Zeile überein. Standardmäßig stimmen ^ und $ nur mit der ersten Zeile überein. Der Code lautet wie folgt:

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

2. Zeichenfolgenabgleich an mehreren aufeinanderfolgenden Positionen

In diesem Fall können wir den regulären Ausdruck (?P8a11bc632ea32a57b3e3693c7987c420...) verwenden, um beispielsweise eine Zeile des Webserver-Zugriffsprotokolls zu extrahieren: '192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"', wir möchten den gesamten Inhalt extrahieren In dieser Protokollzeile können wir mehrere (?P8a11bc632ea32a57b3e3693c7987c420expr) zum Extrahieren schreiben, wobei name in die Variable geändert werden kann, mit der Sie die Zeichenfolge an dieser Position benannt haben, und expr in den regulären Ausdruck der Extraktionsposition geändert werden kann. Der Code lautet wie folgt:

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

Das Ausgabeergebnis ist:

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

Empfohlenes Tutorial: „Python-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWie kann man eine Zeichenfolge mit einem regulären Python-Ausdruck abgleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn