Heim >Backend-Entwicklung >Python-Tutorial >Regulärer Python-Ausdruck[1]
In diesem Artikel geht es um die regulären Ausdrücke von Python.
Beginnen wir ohne weitere Umschweife mit dem Einfachsten:
'.': kann mit jedem einzelnen Zeichen (nur einem Punkt) außer Zeilenumbrüchen übereinstimmen.
'*' kann null oder mehrmals mit dem vorherigen Unterausdruck übereinstimmen (nur ein Sternchen).
Die Kombination der beiden oben genannten „.*“ (Punkt-Stern) passt also zu allem außer Zeilenumbrüchen.
'+': Ein- oder mehrmals wiederholen.
'?': Null oder einmal wiederholen.
'd': Entspricht einem numerischen Zeichen. Entspricht [0-9].
'w' entspricht jedem Wortzeichen, einschließlich eines Unterstrichs. Entspricht „[A-Za-z0-9_]“.
'/s' entspricht jedem Leerzeichen, einschließlich Leerzeichen, Tabulatoren, Formularfeeds usw. Äquivalent zu [ fnrtv]
'^' entspricht dem Anfang der Eingabezeichenfolge.
'$' entspricht dem Ende der Eingabezeichenfolge.
Die oben genannten werden sehr häufig verwendet, natürlich gibt es noch viele weitere häufig verwendete, bitte schauen Sie bei Bedarf im Handbuch nach.
Diese Beschreibung ist nicht intuitiv genug, also machen Sie einfach das Experiment. Es ist sehr einfach, reguläre Ausdrücke in Python zu verwenden. Importieren Sie re direkt:
>>> import re
>>>
Versuchen Sie es zuerst alle zusammenpassen:
>>> vlan = 'switchport access vlan 612' >>> ljds = re.search('.*',vlan).group() >>> ljds 'switchport access vlan 612'
Versuchen Sie, Zahlen abzugleichen:
>>> ljds = re.search('\d',vlan).group() >>> ljds '6'
Da „/d“ mit einer Zahl übereinstimmt, also wenn Sie „612 hier“ abgleichen möchten, drei Zahlen , können Sie „{3}“ hinzufügen:
>>> ljds = re.search('\d{3}',vlan).group() >>> ljds
'612'
Ebenso, wenn Sie 13 Zeichen (einschließlich Leerzeichen) abgleichen möchten:
>>> ljds = re.search('[\w\s]{13}',vlan).group() >>> ljds 'switchport ac'
Ich möchte hier auch erwähnen, dass es sich bei den Quantifizierern regulärer Ausdrücke um gierige und nicht gierige Modi handelt. Bei Gier geht es darum, den Maximalwert zu nehmen und so viele Übereinstimmungen wie möglich zu erzielen. Non-Greedy ist genau das Gegenteil (Greedy-Modus ist die Standardeinstellung). Beispiel:
Das Obige entspricht einer Übereinstimmung von 13 Zeichen. Wenn es so geschrieben ist, dass es mit 2 bis 10 Zeichen übereinstimmt, schreiben Sie einfach: „[ws]{2,10}“, dann ob es mit 2 oder 10 übereinstimmt eins? Da die Standardeinstellung der Greedy-Modus ist, wird das Maximum gefunden:
>>> ljds = re.search('[\w\s]{2,10}',vlan).group() >>> ljds 'switchport'
Fügen Sie nach dem Quantifizierer ein Fragezeichen „?“ hinzu, um in den Non-Greedy-Modus zu wechseln, d. h. die Mindestübereinstimmung:
>>> ljds = re.search('[\w\s]{2,10}?',vlan).group() >>> ljds 'sw'
Als nächstes stellen wir „Capture“ vor:
(exp): Match exp.
(?=exp): Passen Sie die Position vor exp an.
(?8a05f0083a9ee89682e0a9f364251518>> vlan = 'switchport access vlan 612'
Das Grundlegendste:
>>> ljds = re.search('(access)',vlan).group() >>> ljds 'access'
entspricht jedem Zeichen vor „access“:
>>> ljds = re.search('.*(?=access)',vlan).group() >>> ljds 'switchport '
Entspricht allen Zeichen nach „vlan“:
>>> ljds = re.search('(?<=vlan).*',vlan).group() >>> ljds ' 612'
OK, nachdem Sie dies gelernt haben, schauen Sie sich den regulären Ausdruck an, der den Routernamen zuvor erfasst hat:
DeviceName = re.search('.*(?=#show run)',telreply).group()
Das Obige ist der Inhalt des regulären Python-Ausdrucks [1]. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!