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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top