Es scheint, dass die Suchoperatoren und Muster regulärer Ausdrücke und die Regeln der Suche selbst fast dieselben sind wie bei Perl und PHP.
Die Verwendung der Funktion des regulären Ausdrucks ist völlig anders, daher werde ich sie für mein eigenes Studium und meine eigene Organisation schreiben.
Sie können reguläre Ausdrücke verwenden, indem Sie die folgenden Bibliotheken laden.
Lesen
import re
Es gibt zwei Möglichkeiten, reguläre Ausdrücke zu verwenden. Eine besteht darin, das zu durchsuchende Muster im Voraus zu kompilieren. Wenn Sie mit dieser Methode mehrmals nach demselben Muster suchen, können Sie mit hoher Geschwindigkeit suchen, ohne das Muster jedes Mal angeben zu müssen. http://docs.python.jp/3/howto/regex.html#compiling-regular-expressions
Dann wird empfohlen, r am Anfang des Musters hinzuzufügen. Ohne r ist dies grundsätzlich in Ordnung. Durch Hinzufügen kann das Backslash-Zeichen in der Zeichenfolge jedoch wie ein Backslash behandelt werden. So schreiben Sie das Muster Es wird leichter zu verstehen sein.
http://docs.python.jp/3/howto/regex.html#the-backslash-plague
compile
pattern = r"ca"
text = "caabsacasca"
repatter = re.compile(pattern)
matchOB = repatter.match(text)
Die andere Möglichkeit besteht darin, ein Muster festzulegen, wenn ohne Kompilierung gesucht wird. In diesem Fall sollten Sie dies verwenden, wenn Sie das Suchmuster nicht wiederverwenden möchten.
NoCompile
pattern = r"ca"
text = "caabsacasca"
matchOB = re.match(pattern , text)
Es gibt vier Hauptsuchmethoden. http://docs.python.jp/3/howto/regex.html#performing-matches
Methode/Attribut | Zweck |
---|---|
match(pattern, string) | Legt fest, ob es mit dem regulären Ausdruck am Anfang der Zeichenfolge übereinstimmt. |
search(pattern, string) | Bearbeiten Sie die Zeichenfolge, um herauszufinden, wo der reguläre Ausdruck übereinstimmt. |
findall(pattern, string) | Findet alle Teilzeichenfolgen, die dem regulären Ausdruck entsprechen, und gibt ihn als Liste zurück. |
finditer(pattern, string) | Findet alle Teilzeichenfolgen, die dem kanonischen Ausdruck entsprechen, und gibt sie als Iterator zurück. |
http://docs.python.jp/2.7/library/re.html#re.split
Methode/Attribut | Zweck |
---|---|
split(pattern, string) | Jedes Mal teilen, wenn es einen Teil gibt, der dem regulären Ausdruck entspricht. |
sub(pattern, repl, string) | Ersetzen Sie den Teil, der dem regulären Ausdruck entspricht, durch das Zeichen in repl |
Schauen wir uns die Suchmethoden einzeln an.
Dies ist eine Funktion, die bestimmt, ob das Muster am Anfang der Zeichenfolge übereinstimmt. Das matchObject-Objekt geht in matchOB. Verwenden Sie die Funktion .group (), um den übereinstimmenden Teil aus diesem Objekt (str) zu extrahieren (Da es eine andere Funktion zum Extrahieren von Informationen aus dem Objekt als der Funktion group () gibt, wird diese später beschrieben).
match
pattern = r"ca"
text = "caabsacasca"
matchOB = re.match(pattern , text)
if matchOB:
print matchOB.group() # 'ca'
Methode/Attribut | Zweck |
---|---|
group() | Gibt eine Zeichenfolge zurück, die dem regulären Ausdruck entspricht. |
start() | Gibt die Startposition des Spiels zurück. |
end() | Gibt die Endposition des Spiels zurück. |
span() | Match Position(start, end)Gibt einen Taple zurück, der enthält. |
Eine Funktion, die bestimmt, ob ein Teil der Zeichenfolge mit dem Muster übereinstimmt. Im Gegensatz zur Funktion match () stimmt sie auch dann überein, wenn sich das Muster nicht am Anfang der Zeichenfolge befindet. Selbst wenn mehrere Übereinstimmungen vorliegen, wird nur die erste zurückgegeben.
search
pattern = r"ca"
text = "caabsacasca"
matchOB = re.search(pattern , text)
if matchOB:
print matchOB
print matchOB.group() #Gibt die übereinstimmende Zeichenfolge zurück# ca
print matchOB.start() #Gibt die Startposition des Spiels zurück# 0
print matchOB.end() #Gibt die Endposition des Spiels zurück# 2
print matchOB.span() #Match Position(start, end)Gibt ein Tupel zurück, das enthält# (0, 2)
Eine Funktion, die alle Teile der Zeichenfolge, die dem Muster entsprechen, als Liste zurückgibt. Im Gegensatz zu search () können Sie alle passenden Teile erhalten. Der Rückgabewert ist jedoch kein matchObject, sondern nur eine Liste von Zeichenfolgen, sodass group () usw. nicht verwendet werden kann.
findall
pattern = r"ca"
text = "caabsacasca"
#Gibt als Liste alles zurück, was dem Muster entspricht
matchedList = re.findall(pattern,text)
if matchedList:
print matchedList # ['34567', '34567']
Eine Funktion, die den Teil der Zeichenfolge zurückgibt, der dem Muster mit einem Iterator entspricht. Durch Drehen des Rückgabewerts für Schleife usw. können Sie alle Übereinstimmungspunkte auf dieselbe Weise wie bei der Funktion findall () abrufen, da die Funktion findall () eine Liste zurückgibt, die Funktion finditer () jedoch ein Objekt in der Schleife zurückgibt. , End (), start () usw. sind verfügbar.
finditer
pattern = r"ca"
text = "caabsacasca"
#Gibt alles, was dem Muster entspricht, als Iterator zurück
iterator = re.finditer(pattern ,text)
for match in iterator:
print match.group() #Erstes Mal:ca. 2. Mal: ca
print match.start() #Erstes Mal:0 2. Mal: 6
print match.end() #Erstes Mal:2 2. Mal: 8
print match.span() #Erstes Mal: (0, 2)Zweites Mal: (6, 8)
Legen Sie für reguläre Ausdrücke wie Perl am Ende des Musters Eigenschaften wie `/ pattern / s``` (. Entspricht Zeilenumbrüchen) und`
/ pattern / i``` (Groß- und Kleinschreibung beachten) fest. Sie können, aber in Python tun Sie Folgendes:
match
pattern = r"avSCSA"
text = "AVscsa"
------------------------
#Zu kompilierendes Muster
repatter = re.compile(pattern, re.IGNORECASE)#Unempfindlich
matchOB = repatter.match(text)
------------------------
#Muster nicht zu kompilieren
matchOB = re.match(pattern , text, re.IGNORECASE)#Unempfindlich
--------------------------
if matchOB:
print match.group() # ''
Stellen Sie sicher, dass Sie die folgenden Eigenschaften mit `re.``` vor sich verwenden. Wie
re. DOTALL`` ``
re.L```.
Eigentum | Bedeutung |
---|---|
ASCII, A | \w, \b, \s,Und\Stimmt d usw. nur mit ASCII-Zeichen mit ihren jeweiligen Eigenschaften überein. |
DOTALL, S | .Zu jedem Zeichen passen, einschließlich Zeilenumbrüchen |
IGNORECASE, I | Führt Übereinstimmungen ohne Berücksichtigung der Groß- und Kleinschreibung durch |
LOCALE, L | Entspricht dem Gebietsschema |
MULTILINE, M | ^Oder$Handelt auf und stimmt mit mehreren Zeilen überein |
VERBOSE, X (for ‘extended’) | Sie können redundante reguläre Ausdrücke zur Verfügung stellen, um sie übersichtlicher und verständlicher zu machen. |
Abschließend werde ich erklären, wie man mit Japanisch umgeht, was japanische Pythonisten immer in die Irre führt.
Es scheint, dass der normale Zeichenkettentyp (str) in Ordnung ist.
Ah
matchOB = re.match("Ah","Ah")
print matchOB.group()
#Ah
Was ist, wenn Sie Folgendes tun? Scheint zu sein
[Ah-ゞ]
matchOB = re.match("[Ah-ゞ]","Wenn")
#?
Es ist in Ordnung, wenn Sie Unicode verwenden
u[Ah-ゞ]
matchOB = re.match(u"[Ah-ゞ]",u"Wenn")
#Wenn
Wenn Sie sich also mit Japanisch beschäftigen, lassen Sie es einmal Unicode-Typ werden
str→unicode
u = "japanisch".decode("utf-8")
print type(u)
#unicode
print u
#japanisch
unicode→str
u = u"japanisch".encode("utf-8")
print type(u)
#unicode
print u
#japanisch
Auch wenn es um Unicode geht, heißt es, re.U als Option hinzuzufügen, aber ich denke, dass es die gleiche Antwort mit oder ohne sein wird, aber kann mir bitte jemand ~ sagen http://pepper.is.sci.toho-u.ac.jp/index.php?%A5%CE%A1%BC%A5%C8%2FPython%2F%B4%C1%BB%FA%A4%CE%C0%B5%B5%AC%C9%BD%B8%BD
re.U
s = u'Heute ist ein schöner Tag.'
r = re.compile(u'《[^》]*》')
news = r.sub('*', s, re.U)
print s, '>', news
#Heute ist ein schöner Tag.>Das heutige Wetter ist schön*Hallo
not(re.U)
s = u'Heute ist ein schöner Tag.'
r = re.compile(u'《[^》]*》')
news = r.sub('*', s)
print s, '>', news
#Heute ist ein schöner Tag.>Das heutige Wetter ist schön*Hallo
Diese Seite wurde als Referenz verwendet
Regulärer Ausdruck HOWTO - Python 3.4.1 Dokumentation --http: //docs.python.jp/3/howto/regex.html Eine kurze Zusammenfassung der regulären Ausdrücke in Python --minus9ds Tagebuch --http: //minus9d.hatenablog.com/entry/20120713/1342188160 7.2. Re - Regular Expression Operation - Python 2.7ja1 Dokumentation --http: //docs.python.jp/2.7/library/re.html Umgang mit Japanisch im Python-Modul für reguläre Ausdrücke - Hinweise unter Linux während des Testbetriebs --http: //d.hatena.ne.jp/kakurasan/20090424/p1 Behandeln Sie Japanisch mit regulären Python-Ausdrücken | taichino.com --http: //taichino.com/programming/1272
Recommended Posts