Grundlegendes zu mehrzeiligen Übereinstimmungsmustern in Python

Guanhui
Freigeben: 2020-07-24 17:22:33
nach vorne
3003 Leute haben es durchsucht

Grundlegendes zu mehrzeiligen Übereinstimmungsmustern in Python

Frage

Sie versuchen, einen regulären Ausdruck zu verwenden, um einen großen Textblock abzugleichen, und Sie benötigen Übereinstimmung über mehrere Zeilen hinweg.

Lösung

Dieses Problem tritt normalerweise auf, wenn Sie einen Punkt (.) verwenden, um ein beliebiges Zeichen zu finden, aber vergessen Sie, dass der Punkt (.) nicht mit Fakten übereinstimmen kann, die einem Zeilenumbruch entsprechen . Angenommen, Sie möchten versuchen, den C-Split-Kommentar abzugleichen:

>>> comment = re.compile(r&#39;/\*(.*?)\*/&#39;)<br/>>>> text1 = &#39;/* this is a comment */&#39;<br/>>>> text2 = &#39;&#39;&#39;/* this is a<br/>... multiline comment */<br/>... &#39;&#39;&#39;<br/>>>><br/>>>> comment.findall(text1)<br/>[&#39; this is a comment &#39;]<br/>>>> comment.findall(text2)<br/>[]<br/>>>><br/>
Nach dem Login kopieren

Um dieses Problem zu beheben, können Sie die Musterzeichenfolge ändern, um Unterstützung für Zeilenumbrüche hinzuzufügen. Beispiel:

>>> comment = re.compile(r&#39;/\*((?:.|\n)*?)\*/&#39;)<br/>>>> comment.findall(text2)<br/>[&#39; this is a\n multiline comment &#39;]<br/>>>><br/>
Nach dem Login kopieren

In diesem Muster gibt (?:.|n) eine nicht erfassende Gruppe an (d. h. es definiert eine Gruppe, die nur für den Abgleich verwendet wird und nicht einzeln erfasst oder nummeriert werden kann).

Diskussion

re.compile() Die Funktion akzeptiert einen Flag-Parameter namens re.DOTALL , der hier sehr nützlich ist. Es ermöglicht . in regulären Ausdrücken, jedes Zeichen einschließlich Zeilenumbrüchen zuzuordnen. Zum Beispiel:

>>> comment = re.compile(r&#39;/\*(.*?)\*/&#39;, re.DOTALL)<br/>>>> comment.findall(text2)<br/>[&#39; this is a\n multiline comment &#39;]<br/>
Nach dem Login kopieren

Die Verwendung von re.DOTALL zum Markieren von Parametern funktioniert in einfachen Fällen gut, aber wenn das Muster sehr komplex ist oder mehrere Muster kombiniert werden, um ein Zeichenfolgentoken zu erstellen (ausführlich in Abschnitt 2.18 beschrieben), sind einige Bei der Verwendung dieses Markierungsparameters können Probleme auftreten. Wenn Sie die Wahl haben, ist es besser, Ihr eigenes Muster für reguläre Ausdrücke zu definieren, damit es gut funktioniert, ohne dass zusätzliche Markierungsparameter erforderlich sind.

Empfohlenes Tutorial: „Python-Tutorial

Das obige ist der detaillierte Inhalt vonGrundlegendes zu mehrzeiligen Übereinstimmungsmustern in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
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