Suche…


Warum stimmt der Punkt (.) Nicht mit dem Zeilenvorschubzeichen ("\ n") überein?

.* in Regex bedeutet im Grunde " alles bis zum Ende der Eingabe fangen".

Also, für einfache Saiten, wie hello world , funktioniert .* perfekt. Wenn Sie jedoch eine Zeichenfolge haben, die z. B. Zeilen in einer Datei darstellt, werden diese Zeilen durch ein Trennzeichen getrennt , z. B. \n (Newline) auf Unix-ähnlichen Systemen und \r\n (Wagenrücklauf und Newline) Windows.

In den meisten Regex-Engines ist . stimmt nicht mit Zeilenumbrüchen überein, so dass die Übereinstimmung am Ende jeder logischen Zeile endet. Wenn Sie wollen . Um wirklich alles, einschließlich der Zeilenumbrüche, zu finden, müssen Sie den Modus "dot-matches-all" in Ihrer re.DOTALL Engine re.DOTALL (beispielsweise re.DOTALL Flag in Python oder /s in PCRE).

Warum überspringt ein Regex einige schließende Klammern und passt sie danach an?

Betrachten Sie dieses Beispiel:

Er ging in das Café "Dostoevski" und sagte: "Guten Abend."

Hier haben wir zwei Sätze von Zitaten. Nehmen wir an, wir wollen beide zusammenbringen, so dass unsere Regex-Matches bei "Dostoevski" und "Good evening." übereinstimmen "Good evening."

Zunächst könnten Sie versucht sein, es einfach zu halten:

".*"  # matches a quote, then any characters until the next quote

Aber es funktioniert nicht: Es stimmt mit dem ersten Zitat in "Dostoevski" und bis zum Schlusszitat in "Good evening." überein "Good evening." , einschließlich der and said: Teil. Regex101-Demo

Warum ist das passiert?

Dies geschieht, weil die Regex-Engine, wenn sie auf .* Stößt, die gesamte Eingabe bis zum Ende "frisst". Dann muss es mit dem Finale übereinstimmen " . Es wird also vom Ende des Matches " und der übereinstimmende Text losgelassen, bis das erste " gefunden " ist - und es ist natürlich das letzte " im Match , am Ende von "Good evening." Teil.

Wie kann man dies verhindern und genau auf die ersten Zitate passen?

Verwenden Sie [^"]* . Es frisst nicht alle Eingaben - nur bis zum ersten " , genauso wie es benötigt wird. Regex101-Demo



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow