So suchen Sie nach Vorkommen von mehr als einem Leerzeichen zwischen Wörtern in einer Zeile
1. this is a line containing 2 spaces
2. this is a line containing 3 spaces
3. this is a line containing multiple spaces first second three four
Alle oben genannten sind gültige Übereinstimmungen für diesen regulären Ausdruck. Welche Regex soll ich verwenden?
Antworten:
SPACE (2 oder mehr)
Sie können auch überprüfen, ob vor und nach diesen Leerzeichen Wörter folgen. (keine anderen Leerzeichen wie Tabulatoren oder neue Zeilen)
das gleiche, aber Sie können auch nur die Leerzeichen für Aufgaben wie das Ersetzen auswählen (erfassen)
oder sehen Sie, dass es vor und nach Leerzeichen alles gibt, nicht nur Wortzeichen (außer Leerzeichen)
quelle
\w
bedeutet "Wortzeichen", dh alphanumerisch und unterstrichen, jedoch keine anderen Nicht-Leerzeichen. Verwenden Sie\S
(Großbuchstaben S), um nach Nicht-Leerzeichen zu suchen . Außerdem stimmt die erste nur mit Zeilen überein, die zwei oder mehr Leerzeichen enthalten, und sonst nichts.\S
, verpasst habe . Ich ziehe es einfach vor, mich bei solchen Funktionen nicht auf Groß- und Kleinschreibung zu verlassen. Es ist einfacher zu lesen.\w[ ]{2,}\w
wird nicht übereinstimmenword.<2 spaces>more words
oder eine Zeichenfolge, die vollständig aus Leerzeichen besteht.[^\s]([ ]{2,})[^\s]\w
wird auf Zeilen fehlschlagen, die mit Leerzeichen oder Zeichenfolgen wiebla<2 spaces>.
... beginnenEinfache Lösung:
Dies entspricht allen Vorkommen eines oder mehrerer Leerzeichen. Wenn Sie die gesamte Zeile abgleichen müssen, jedoch nur, wenn sie zwei oder mehr aufeinanderfolgende Leerzeichen enthält:
Wenn die Leerzeichen nicht aufeinanderfolgend sein müssen:
quelle
.*
ist normalerweise gierig, was bedeutet, dass es das Ende der getesteten Zeichenfolge erreicht und alles, was folgt, wenn es obligatorische Zeichen gibt, nicht übereinstimmt. In der Regel in diesem Fall ist es eine gute Praxis hinzuzufügen?
, wie diese.*?
. Es passierte mir mit PHPs PCRE/^.*b.*$/
stimmt tatsächlich überein"foobar"
, obwohl Sie erwarten würden, dass die erste Gier.*
bereits mit der gesamten Zeichenfolge übereinstimmt.Diese Regex wählt alle Leerzeichen aus. Sie können diese verwenden und durch ein einzelnes Leerzeichen ersetzen
Beispiel in Python
quelle
Suche nach
[ ]{2,}
. Dadurch werden zwei oder mehr benachbarte Leerzeichen irgendwo innerhalb der Linie gefunden. Es werden auch führende und nachfolgende Leerzeichen sowie Linien abgeglichen, die vollständig aus Leerzeichen bestehen. Wenn Sie das nicht wollen, lesen Sie Alexanders Antwort.Eigentlich können Sie die Klammern weglassen, sie dienen nur der Klarheit (ansonsten ist das Leerzeichen, das wiederholt wird, nicht so gut sichtbar :)).
Das Problem mit dem
\s{2,}
ist , dass es auch Zeilenumbrüche auf Windows - Dateien Übereinstimmen (wo neue Zeilen bezeichnet werden durchCRLF
oder\r\n
die abgestimmt sind durch\s{2}
.Wenn Sie auch mehrere Tabulatoren und Leerzeichen suchen möchten, verwenden Sie
[ \t]{2,}
.quelle
more than one space between words in a line
. Wie ist[ ]{2,}
zwischen Wörtern? Hast du die Frage überhaupt gelesen?Hier ist meine Lösung
Dadurch werden alle Ziffern, Kommas und neuen Zeilen entfernt, aber der mittlere Bereich wie der Datensatz von wird ausgewählt
quelle