Wie kann ich einen regulären Ausdruck haben, der nach Leerzeichen oder Tabulatoren, aber nicht nach Zeilenumbrüchen sucht? Ich habe es versucht, \s
aber herausgefunden, dass es auch auf Zeilenumbrüche testet.
Ich benutze C # / WPF, aber es sollte keine Rolle spielen.
\h
Zeichenklasse, aber es zeigt, dass es viele andere Leerzeichen gibt, falls Sie sie hier zur Liste hinzufügen müssen.\t
?Probieren Sie diesen Zeichensatz aus:
Dies entspricht nur einem Leerzeichen oder einem Tabulator.
quelle
Wie @ Eiríkr Útlendi feststellte, berücksichtigt die akzeptierte Lösung nur zwei Leerzeichen: die horizontale Registerkarte (U + 0009) und ein Leerzeichen (U + 0020). Andere Leerzeichen wie nicht unterbrechende Leerzeichen (die sich zufällig in dem Text befinden, mit dem ich mich befassen möchte) werden nicht berücksichtigt. Eine vollständigere Liste mit Leerzeichen ist in Wikipedia enthalten und wird auch in der verknüpften Perl-Antwort erwähnt . Eine einfache C # -Lösung, die diese anderen Zeichen berücksichtigt, kann mithilfe der Zeichenklassensubtraktion erstellt werden
oder, einschließlich der Lösung von Eiríkr Útlendi, erhalten Sie
quelle
Hinweis: Für diejenigen , die sie mit CJK - Text (Chinesisch, Japanisch und Koreanisch), der Double-Byte - Raum (Unicode
\u3000
) ist nicht in enthält\s
für jede Implementierung habe ich versucht , so weit (Perl, .NET, PCRE, Python). Sie werden Ihre Strings müssen entweder normalisieren zuerst (wie von allen ersetzt\u3000
mit\u0020
), oder Sie einen Zeichensatz, der diese Codepoint enthält zusätzlich zu was auch immer andere Leerzeichen Sie Targeting, wie verwenden müssen[ \t\u3000]
.Wenn Sie Perl oder PCRE verwenden, haben Sie die Möglichkeit, die
\h
Kurzform für horizontale Leerzeichen zu verwenden , die anscheinend unter anderem den Einzelbytebereich , den Doppelbytebereich und die Registerkarte enthält. Weitere Informationen finden Sie im Perl- Thread (Match Whitespace, aber nicht Newlines) .Diese
\h
Abkürzung wurde jedoch nicht für .NET und C # implementiert, wie ich am besten beurteilen konnte.quelle
\h
(eingeführt in Java 8) enthält\u3000
, aber\s
nicht, es sei denn, Sie setzen den UNICODE_CHARACTER_CLASS-Modus (eingeführt in Java 7).Wenn Sie den Platz unter dem Code ersetzen möchten, haben Sie in gearbeitet
C#
Regex.Replace(Line,"\\\s","");
Für Tab
Regex.Replace(Line,"\\\s\\\s","");
quelle