Heim > Backend-Entwicklung > Python-Tutorial > So gleichen Sie eine Zeichenfolge mit einem regulären Python-Ausdruck ab

So gleichen Sie eine Zeichenfolge mit einem regulären Python-Ausdruck ab

coldplay.xixi
Freigeben: 2020-10-29 10:18:46
Original
20641 Leute haben es durchsucht

So gleichen Sie Zeichenfolgen mit regulären Python-Ausdrücken ab: 1. Verwenden Sie den regulären Ausdruck [(.+?)], um die Zeichenfolge an einer einzelnen Position zu extrahieren. 2. Verwenden Sie den regulären Ausdruck [(?P<name>...)] [; Entspricht mehreren aufeinanderfolgenden Positionen in einer Zeichenfolge.

So gleichen Sie eine Zeichenfolge mit einem regulären Python-Ausdruck ab

Verwandte kostenlose Lernempfehlungen: Python-Video-Tutorial

Python-Methode zum Abgleichen von Zeichenfolgen mit regulären Ausdrücken:

1. Zeichenfolgenextraktion an einer einzelnen Position

Dabei In diesem Fall können wir zum Extrahieren den regulären Ausdruck (.+?) verwenden. Wenn wir zum Beispiel eine Zeichenfolge „a123b“ den Wert 123 zwischen ab extrahieren möchten, können wir findall mit regulären Ausdrücken verwenden, was eine Liste mit allen übereinstimmenden Bedingungen zurückgibt. (.+?)这个正则表达式来提取。 举例,一个字符串"a123b",如果我们想提取ab之间的值123,可以使用findall配合正则表达式,这样会返回一个包含所以符合情况的list。

代码如下:

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

1.1贪婪和非贪婪匹配

如果我们有一个字符串”a123b456b”,如果我们想匹配a和最后一个b之间的所有值而非a和第一个出现的b之间的值,可以用?来控制正则贪婪和非贪婪匹配的情况。

代码如下:

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

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输出[(&#39;23&#39;, &#39;34&#39;)]
Nach dem Login kopieren

加上re.M后,^$标志将会匹配每一行,默认^和$只会匹配第一行。

代码如下:

str = "a23b\na34b"
 
re.findall(r"^a(\d+)b", str)
#输出[&#39;23&#39;]
 
re.findall(r"^a(\d+)b", str, re.M)
#输出[&#39;23&#39;, &#39;34&#39;]
Nach dem Login kopieren

二、连续多个位置的字符串提取

这种情况我们可以使用(?P<name>…)这个正则表达式来提取。举例,如果我们有一行webserver的access日志:&#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;,我们想提取这行日志里面所有的内容,可以写多个(?P<name>expr)

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

1.1 Gieriger und nicht gieriger Abgleich

🎜🎜Wenn wir eine Zeichenfolge „a123b456b“ haben, möchten wir alle Werte zwischen a und dem letzten b anstelle von a und abgleichen Beim ersten Vorkommen kann der Wert zwischen b zur Steuerung des regulären gierigen und nicht gierigen Abgleichs verwendet werden. 🎜🎜Der Code lautet wie folgt: 🎜
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
🎜🎜1.2 Mehrzeiliger Abgleich🎜🎜🎜Wenn Sie einen mehrzeiligen Abgleich wünschen, müssen Sie die Flags re.S und re.M hinzufügen. Stimmt mit Zeilenumbruchzeichen überein, standardmäßig nicht. 🎜🎜Der Code lautet wie folgt: 🎜rrreee🎜Nach dem Hinzufügen von re.M stimmt das ^$-Zeichen mit jeder Zeile überein. Standardmäßig stimmen ^ und $ nur mit der ersten Zeile überein. 🎜🎜Der Code lautet wie folgt: 🎜rrreee🎜🎜2. Extraktion von Zeichenfolgen an mehreren aufeinanderfolgenden Positionen🎜🎜🎜In diesem Fall können wir den regulären Ausdruck (?P<name>...)verwenden > extrahieren. Wenn wir beispielsweise eine Zeile des Zugriffsprotokolls des Webservers haben:'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 dieser Protokollzeile extrahieren, wir können mehrere (?P<name>expr) zum Extrahieren schreiben und die Der Name kann in Ihren Namen geändert werden. Für die für die Positionszeichenfolge benannte Variable kann expr in den regulären Ausdruck zum Extrahieren der Position geändert werden. 🎜🎜Der Code lautet wie folgt: 🎜rrreee🎜Das Ausgabeergebnis ist: 🎜rrreee

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

Verwandte Etiketten:
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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage