Heim >Backend-Entwicklung >Python-Tutorial >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('^(?P<remote_ip>[^ ]*) (?P<date>[^ ]*) "(?P<request>[^"]*)" (?P<status>[^ ]*) (?P<size>[^ ]*) "(?P<referrer>[^"]*)" "(?P<user_agent>[^"]*)"') 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!