Regex für mehr als 2 Leerzeichen, aber keine neue Linie

86

Ich möchte alle mehr als 2 Leerzeichen in einer Zeichenfolge ersetzen, aber keine neuen Zeilen. Ich habe diesen regulären Ausdruck: \s{2,}Er passt aber auch zu neuen Zeilen.

Wie kann ich nur zwei oder mehr Leerzeichen und keine neuen Zeilen abgleichen?

Ich benutze c #

Bruno
quelle
@nihcap - Tatsächlich hat C # keine eigene Regex-Variante, sondern ist Teil der allgemeinen .Net-Bibliothek. In diesem Fall sind .Net und C # nützliche Tags.
Kobi

Antworten:

156

Fügen Sie die Leerzeichen, die Sie abgleichen möchten, in eine Zeichenklasse ein. Beispielsweise:

[ \t]{2,}

Entspricht 2 oder mehr Leerzeichen oder Tabulatoren.

Sie könnten auch tun:

[^\S\r\n]{2,}

Dies entspricht jedem Leerzeichen mit Ausnahme von \rund \nmindestens zweimal (beachten Sie, dass das Kapital Sin \Sfür steht [^\s]).

Bart Kiers
quelle
Was meinst du mit "kurz für" in deinem letzten Satz? Wie würde der gesamte reguläre Ausdruck ohne diese Abkürzung aussehen?
Lonnie Best
5
@LonnieBest in regulären Ausdrücken für Escape-Sequenzen wie \ w ist es häufig eine Konvention, dass die Escape-Sequenz in Großbuchstaben der inverse Zeichensatz der Escape-Sequenzen in Kleinbuchstaben ist. ZB ist \ d invers zu \ D, \ s ist invers zu \ S, \ w ist invers zu \ W usw. Außerdem kann innerhalb eines durch [] begrenzten Zeichenklassensatzes wie [abc] ein angegeben werden invers mit [^ abc]. Somit ist \ S äquivalent zu [^ \ s], was auch der nicht erlaubten Notation [^^ \ S] äquivalent wäre, wenn es erlaubt wäre. (^^ ist keine gültige Art, eine Umkehrung einer Umkehrung
darzustellen
@DejayClayton Danke, das wusste ich nicht.
Lonnie Best
Diese Antwort hat funktioniert, aber warum geht es \s{2,}mit Zeilenumbrüchen weiter? Wenn es \n\s{2,}so wäre, würde ich verstehen. Und warum funktioniert das Eingeben eines wörtlichen Leerzeichens in Klammern?
Bit-less
"Diese Antwort hat funktioniert, aber warum greift \ s {2,} nach Zeilenumbrüchen?" weil \sÜbereinstimmungen Leerzeichen, Tabulatoren und Zeilenumbrüche. "Und warum funktioniert das Eingeben eines wörtlichen Leerzeichens in Klammern?", Nun, äh, weil es funktioniert. Ich weiß nicht, was ich dazu noch sagen soll :)
Bart Kiers