So prüfen Sie den optionalen Leerzeichen mit regex
Ich versuche, einen regex zu entsprechen, wird eine Zeichenfolge mit Zeichen, ob oder nicht es ist ein Leerraum zwischen Ihnen. Zum Beispiel, ich möchte es zu entsprechen, wenn es ABC
, aber auch A BC
, A B C
oder AB C
. Ich habe versucht zu tun, so etwas wie A\s?B\s?C\s?
, aber es funktioniert nicht und ich bin offensichtlich etwas falsch. Konnte ich einen regex-Ausdruck für jede Möglichkeit aber das würde mess up mein code und ich würde gerne vermeiden, dass. Wenn jemand könnte mich in die richtige Richtung, ich würde es zu schätzen wissen.
- Was die regex-engine?
- Haben Sie versucht, mit
([a-z] ?)
im Ort[a-z]
? - ja, habe ich, zu tun, dass der nur passt, wenn die Zeichen und Leerzeichen eingefügt werden, zum Beispiel Ein(\s ?) passt nur für A_ und a nicht.
- Kommt wohl auf den Motor, da @CodeGnome gefragt. Zum Beispiel hier: regex101.com ich kann mit dem Ausdruck
([a-z] ?)+
zu entsprechen, wird der gesamte string"he l l oworl d"
- Tut mir Leid, konnte ich nicht sagen. Es ist für eine automoderator auf reddit, aber ich vermute, es ist mit Javascript, denn ich verwende eine Javascript-online-tester zum test der expression.
- Auch, versuchen Sie mit einem einzelnen Leerzeichen ` ` oder auch tabs und newlines?
- Wenn Sie einfügen, wird der reguläre Ausdruck mit einem string zwischen doppelten Anführungszeichen stehen, müssen Sie die Flucht der umgekehrte Schrägstriche:
"A\\s?B\\s?C\\s?"
- nur ein einzelnes Leerzeichen, keine Tabulatoren oder Zeilenumbrüche. Ich könnte auch prüfen wollen, für eine beliebige Anzahl von whitespace-Zeichen. Halten Sie im Verstand, dass dieses Wesen als einen Obszönitäten-filter und Leute wie Wege zu finden, um ihn herum.
- Dann verwenden Sie ` ` anstelle von
\s
. Auch auf die Vermeidung von tailing Räume etwas wie([a-z] ?)*[a-z])
. - Wenn der string immer beginnt und endet mit einem Zeichen, Sie müssen nur sorgen über das, was in der Mitte: so etwas sollte es tun
[a-z][a-z ]{2,}[a-z]
- beginnen Sie mit einem Buchstaben, enden mit einem Zeichen und suchen Sie nach zwei oder mehr Zeichen zwischen (einschließlich Leerzeichen). - aber das es ermöglicht Sequenzen von Leerzeichen, wie
a b
, aber ich denke, die OP hat nicht den Wunsch, dass. - der OP hat angegeben, nur einem einzigen whitespace - wenn es also 2 Zeichen zwischen dem ersten und letzten, man muss kein Raum.
- Ja, gut, wie aus Ihrem akzeptierten Antworten, diese Frage war nicht klar, auf alle. Das nächste mal geben Beispiele für die erwartete Eingabe und Ausgabe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie das folgende Muster, vielleicht gibt es mehrere Räume?:
Ihre Muster verwendet ? das bedeutet, dass es mit einer einzigen vorkommen oder kein auftreten des vorangegangenen Zeichens. Die * im oben genannten Muster passen zu mehreren auftreten oder keine.
\s*
entspricht, eine unbegrenzte Anzahl von beliebiger whitespace-Zeichen (einschließlich[ \t\n\r\f]
und möglicherweise viele andere, je nach Geschmack und Einstellung).Wenn Sie möchten, übereinstimmen, 0 oder 1 Leerzeichen, die Sie verwenden können
{min, max}
mit min=0 und max=1 das ist das gleiche wie?
:Demo
\s
wird, allerdings entsprechen die neuen Linien, so dass alles, was mit\s
entsprechenA\nB\nC
die möglicherweise nicht erwünscht sind.Wenn Sie wollen, zu begrenzen, um Leerzeichen oder tabs, definieren Sie einen Charakter-Klasse:
Wenn Sie möchten, unbegrenzte Leerzeichen zwischen ABC, verwenden Sie die
*
für das Vorherige match (oder verwenden Sie{0,}
)?
mit{0,1}
? In jeder regex-Geschmack, die ich verwendet habe,?
und{0,1}
sind genau gleichwertig. Auch Aromen, die nennen sich POSIX BRE (ein standard, der enthält weder?
noch{min,max}
) dazu neigen, zu unterstützen, sowohl in den Formen\?
und\{0,1\}
.match 0 or 1 spaces
an der Spitze undIf you want unlimited spaces between the ABC, use the * for the previous match
. Ich wies auch darauf hin, dass\s
entspricht einem Wagenrücklauf, die nicht zu passen scheinen, was er wollte. Ich bearbeitet habe, zu klären.Mit dieser Lösung
([a-z] ?)+[a-z]
Sie können mit Zeichen, getrennt durch höchstens ein Leerzeichen, optional. Wenn Sie tolerieren können Leerzeichen, gehen für([a-z] ?)+
.https://regex101.com/r/nE1mJ2/2