Heim > Backend-Entwicklung > Python-Tutorial > So extrahieren Sie Zeichenfolgen mithilfe regulärer Ausdrücke in Python

So extrahieren Sie Zeichenfolgen mithilfe regulärer Ausdrücke in Python

巴扎黑
Freigeben: 2017-03-30 14:17:02
Original
2271 Leute haben es durchsucht

Vorwort

Ich werde nicht auf die Grundkenntnisse regulärer Ausdrücke eingehen. Wenn Sie interessiert sind, können Sie hier klicken. Im Allgemeinen gibt es zwei Situationen Zum einen extrahiert man eine Zeichenfolge an einer einzelnen Position im Text, zum anderen extrahiert man eine Zeichenfolge an mehreren aufeinanderfolgenden Positionen. Bei der Protokollanalyse wird diese Situation auftreten, und ich werde im Folgenden auf die entsprechenden Methoden eingehen.

1. String-Extraktion an einer einzelnen Position

In diesem Fall können wir zum Extrahieren den regulären Ausdruck (.+?) verwenden. Wenn wir beispielsweise für eine Zeichenfolge „a123b“ den Wert 123 zwischen ab extrahieren möchten, können wir findall mit einem regulären Ausdruck verwenden, der eine Liste mit allen übereinstimmenden Situationen zurückgibt.

Der Code lautet wie folgt:

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



1.1 Greedy- und Non-Greedy-Matching

Wenn wir eine Zeichenfolge „a123b456b“ haben, können wir alle Werte zwischen a und dem letzten b abgleichen, anstatt den Wert zwischen a und dem ersten Vorkommen von b -gieriges Matching.

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']
Nach dem Login kopieren



1.2 Mehrzeilenabgleich

Wenn Sie mehr möchten. Wenn die Zeilen übereinstimmen, müssen Sie die Flags re.S und re.M hinzufügen. Stimmt mit Zeilenumbruchzeichen überein, standardmäßig nicht.

Der Code lautet 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 Login kopieren



Nach dem Hinzufügen von re.M stimmt die ^$-Markierung mit jeder Zeile überein, der Standardeinstellung ^ und $ Nur die erste Zeile wird abgeglichen.

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']
Nach dem Login kopieren



2. String-Extraktion mehrerer aufeinanderfolgender Positionen

In diesem Fall können wir zum Extrahieren den regulären Ausdruck

(?P<name>…)
Nach dem Login kopieren

verwenden. Wenn wir beispielsweise eine Zeile im Webserver-Zugriffsprotokoll haben:

&#39;192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"&#39;
Nach dem Login kopieren

und wir den gesamten Inhalt in dieser Protokollzeile extrahieren möchten, können wir mehrere

(?P<name>expr)
Nach dem Login kopieren

schreiben zu extrahieren, wo name Sie können es in die Variable ändern, die Sie als Positionszeichenfolge benannt haben, und expr kann in den regulären Ausdruck zum Extrahieren der Position geändert werden.

Der Code lautet wie folgt:

import re
line =&#39;192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" 
"Mozilla/5.0"&#39;
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
Nach dem Login kopieren



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
Nach dem Login kopieren



Zusammenfassung

Das Obige ist der gesamte Inhalt dieses Artikels Der Artikel wird für Ihr Studium oder Ihre Arbeit hilfreich sein. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen.

Das obige ist der detaillierte Inhalt vonSo extrahieren Sie Zeichenfolgen mithilfe regulärer Ausdrücke in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage