Überlappende reguläre Ausdrücke in Python und Java

Referenz: https://stackoverflow.com/questions/17971466/java-regex-overlapping-matches

Normalerweise wird beim Abgleichen eines regulären Ausdrucks der in einer Übereinstimmung verwendete Zeichenfolgenteil in einer anderen Übereinstimmung nicht zweimal verwendet. Zum Beispiel aus der Zeichenfolge " _apple_banana_cherry_ " Wenn Sie mit / _ [^ _] + _ / übereinstimmen, können Sie zwei Dinge erhalten, _apple_ und _cherry_. Wenn Sie das überlappende "\ _" verwenden möchten, um drei, "apple", "banana" und "cherry" zu nehmen, müssen Sie eine spezielle angeben.

Für Python

Eine einfache Möglichkeit besteht darin, das reguläre Ausdruckspaket "regex" zu verwenden und mit der Option "overlapped = True" abzugleichen.

{.python}


>>> import regex as re
>>> re.findall("_[^_]+_", "_apple_banana_cherry_")
['_apple_', '_cherry_']
>>> re.findall("_[^_]+_", "_apple_banana_cherry_", overlapped=True)
['_apple_', '_banana_', '_cherry_']

Für Java

Im Fall von Java ist es einfach, das Standardpaket für reguläre Ausdrücke zu verwenden und den startIndex zu verschieben.

{.java}


Matcher m = Pattern.compile("_[^_]+(_)").matcher("_apple_banana_cherry_");
if (m.find()) {
    do {
        System.out.println(m.group());
    } while (m.find(m.start(1)));
}

Kommentar: Mit / _ [^ _] + (_) / wird das zweite erscheinende _ in () eingeschlossen, damit es als Gruppe 1 erfasst werden kann. m.start (1) gibt den ersten Index der Gruppe 1 zurück. m.find (N) bedeutet, dass die Übereinstimmung mit dem N-ten Zeichen beginnt. "M.Find (m.start (1))" bedeutet also, m.find () vom ersten Index der Gruppe 1 aus zu starten. Mit anderen Worten, in der zweiten und den folgenden Schleifen wird die nächste Übereinstimmung von "_" am Ende der übereinstimmenden Zeichenfolge gestartet.

note: Es kann einfacher sein, eine benannte Gruppe zu verwenden, um anzugeben, welche Gruppe der erste Index für die nächste Übereinstimmung sein soll.

{.example}


(?<name>PATTERN)

Möglicherweise benötigen Sie auch eine Nicht-Erfassungsgruppe für komplexere Übereinstimmungsmuster.

{.example}


(?:PATTERN)

Recommended Posts

Überlappende reguläre Ausdrücke in Python und Java
Über Python und reguläre Ausdrücke
Bei Verwendung regulärer Ausdrücke in Python
[Python] Reguläre Ausdrücke Reguläre Ausdrücke
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Unterschiede zwischen Python- und Java-Syntax
Ersetzen Sie Nicht-ASCII durch reguläre Ausdrücke in Python
Verwenden Sie \ d nicht in regulären Python 3-Ausdrücken!
Verwendung regulärer Ausdrücke in Python
Reguläre Ausdrücke, die in Python leicht und solide zu erlernen sind
Regulärer Ausdruck in Python
Ein Forscher eines Pharmaunternehmens fasste die kanonischen Ausdrücke in Python zusammen
Ich habe eine Klasse in Python3 und Java geschrieben
Mehrfacher Regressionsausdruck in Python
Ich habe die Geschwindigkeit regulärer Ausdrücke in Ruby, Python und Perl (Version 2013) verglichen.
Verwenden Sie reguläre Ausdrücke in C.
Ich habe Java und Python verglichen!
Wickeln Sie lange Ausdrücke in Python ein
Stapel und Warteschlange in Python
Unittest und CI in Python
Poisson-Verteilung und kumulative Poisson-Verteilung über SQLite in Python und Java
Befreien Sie sich mit Python und regulären Ausdrücken von schmutzigen Daten
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
Entfernen Sie führende und nachfolgende Leerzeichen in Python, JavaScript oder Java
Zeichnen wir ein Diagramm der Poisson-Verteilung und der kumulativen Poisson-Verteilung in Python bzw. Java.
Signale in Java erkennen und verarbeiten.
Python-Tapple-Einschlüsse und Generatorausdrücke
Unterschied zwischen Java und Python (Memo)
Pakete, die MIDI mit Python Midi und Pretty_Midi verarbeiten
Unterschied zwischen list () und [] in Python
Vergleich der grundlegenden Grammatik zwischen Java und Python
Unterschied zwischen == und ist in Python
Zeigen Sie Fotos in Python und HTML an
Sortieralgorithmus und Implementierung in Python
Ich kann mich nicht an reguläre Python-Ausdrücke erinnern
Bearbeiten Sie Dateien und Ordner in Python
Über Python und Cython dtype
Informationen zu Python Primer-Modulen und bedingten Ausdrücken
Zuweisungen und Änderungen in Python-Objekten
Überprüfen und verschieben Sie das Verzeichnis in Python
Verschlüsselung mit Python: IND-CCA2 und RSA-OAEP
Hashing von Daten in R und Python
Funktionssynthese und Anwendung in Python
Exportieren und Ausgeben von Dateien in Python
Reverse Flat Pseudonym und Katakana in Python2.7
Lesen und Schreiben von Text in Python
[GUI in Python] PyQt5-Menü und Symbolleiste-
Umgang mit regulären Ausdrücken durch PHP / Python
Erstellen und lesen Sie Messagepacks in Python
Ein Memo, das doppelte Anführungszeichen in voller Breite mit regulären Python-Ausdrücken verarbeitet
Lösen in Ruby, Python und Java AtCoder ABC141 D Priority Queue
So zeigen Sie Bytes in Java und Python auf die gleiche Weise an
Unterschied in der Authentizität zwischen Python und JavaScript
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
Module und Pakete in Python sind "Namespaces"
Vermeiden Sie verschachtelte Schleifen in PHP und Python
Unterschiede zwischen Ruby und Python im Umfang
AM-Modulation und Demodulation mit Python Part 2
Echte Werte und Eigenvektoren: Lineare Algebra in Python <7>