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
...)] [; Entspricht mehreren aufeinanderfolgenden Positionen in einer Zeichenfolge.
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)# 输出['123']
1.1贪婪和非贪婪匹配
如果我们有一个字符串”a123b456b”,如果我们想匹配a和最后一个b之间的所有值而非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')]
加上re.M后,^$标志将会匹配每一行,默认^和$只会匹配第一行。
代码如下:
str = "a23b\na34b" re.findall(r"^a(\d+)b", str) #输出['23'] re.findall(r"^a(\d+)b", str, re.M) #输出['23', '34']
二、连续多个位置的字符串提取
这种情况我们可以使用(?P
这个正则表达式来提取。举例,如果我们有一行webserver的access日志:'192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"'
,我们想提取这行日志里面所有的内容,可以写多个(?P
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[^ ]*) (?P [^ ]*) "(?P [^"]*)" (?P [^ ]*) (?P [^ ]*) "(?P [^"]*)" "(?P [^"]*)"') regMatch = reg.match(line) linebits = regMatch.groupdict() print linebits for k, v in linebits.items() : print k+": "+v
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
(?P...)
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
(?Pexpr)
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: rrreeeDas 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!