Regex für die Übereinstimmung der Ankernegation und String
-
27-10-2019 - |
Frage
Ich versuche vor einer bestimmten Zeichenfolge einen Leerzeichen hinzuzufügen (Token
zum Beispiel) durch Ersetzen einer Regex durch ein anderes: somethingToken
soll werden something Token
aber something Token
Sollte bleibensomething Token_
und nichtsomething Token
(mit 2 Leerzeichen)
Ich habe Probleme, einen Regex zu finden, der mit einem Nicht-Raum-Charakter und dann dem Token übereinstimmt, ohne den Nicht-Raum-Charakter in das Spiel aufzunehmen (ansonsten würde es auch ersetzt). Ein (fehlgeschlagener) Versuch bestand darin, a zu negieren \b
Anker (der dem Beginn eines Wortes übereinstimmt), aber ich weiß nicht, ob ich einen Anker negieren kann. Jede Hilfe dazu wird geschätzt. Vielen Dank.
Lösung
Ich habe gerade die Antwort darauf gefunden, vielleicht wird sie für jemand anderen nützlich sein:
\BToken
Dies repräsentiert eine negierte Wortgrenze, so dass die Standard -Wortgrenze ( b) im Wesentlichen nicht übereinstimmt. Für mein Beispiel stimmt es tatsächlich überein etwas aber nicht etwas Token das bleibt wie ist.
Andere Tipps
In Java kann dies wie folgt erreicht werden:
final String text = "fooToken foo Token";
// Prints 'foo Token foo Token'
System.out.println(text.replaceAll("(?<=\\S)(?=Token)", " "));
Die Konzepte hier sind aussehend und aussehend. Sehen Regex Tutorial - Lookahead und LookBehind Zero -Width Assertions für mehr Informationen.
(?<!\u0020)(?=Token)
Dies wird nach einem Nicht-Raum zurückblicken und dann nach Token aussehen, aber keine Breite hat. Auf diese Weise können Sie diese Übereinstimmung durch einen Platz ersetzen.
Bearbeiten: Wenn Sie es in JavaScript arbeiten müssen, arbeiten Sie.\u0020?(?=Token)
Machen Sie einen Speicherplatz optional, dann ersetzen Sie den Speicherplatz durch einen Platz für keine Nettoänderung.