/ / Regex, um ein einzelnes Zeichen in String zu finden - Java, Javascript, Regex

Regex, um einem einzelnen Zeichen in String zu entsprechen - Java, Javascript, Regex

Ich möchte, dass ein Regex einzelne Zeichen durch ein Leerzeichen ersetzt (oder löscht).

Zum Beispiel wenn ich:

" I have played u with no i and no j o o o o x w x x s"

Es sollte zurückkommen:

" have played with no and"

Ich habe versucht:

s+w{1}s+

Aber wenn ich es benutze, bekomme ich:

" have played with no and no o o x x s"

Mir fehlt etwas Ich denke, es hängt mit einer Art "überlappender Übereinstimmungen" zusammen.

Antworten:

2 für die Antwort № 1

Ihr Regex funktioniert folgendermaßen:

finden space dann ein Zeichen, dann ein anderes spaceund entferne es. In diesem Fall können Leerzeichen, die ein Zeichen umgeben, nicht wie im Fall eines anderen Zeichens verglichen werden

_a_b_c
^^^ -this part matches our pattern so it will be removed leaving

b_c and now neither `b` or `c` is surrounded with spaces so they will not
be removed

Um dieses Problem zu lösen, fügen Sie einfach ein oder mehrere Leerzeichen (oder den Anfang der Zeichenfolge) und ein Zeichen danach ein (^|s+)w.
Um sicherzustellen, dass nach diesem Zeichen mindestens ein Leerzeichen (oder das Ende der Zeichenfolge) vorhanden ist, diese Leerzeichen jedoch nicht in Übereinstimmung eingeschlossen werden, können Sie sie verwenden Schau voraus Mechanismus wie (?=s+|$).

Also im Fall von Java versuchen

String newString = yourString.replaceAll("(^|\s+)\w(?=\s+|$)","");

und in JavaScript

var replaced = text.replace(/(^|s+)w(?=s+|$)/g,"")

Übrigens w wird mit jedem Zeichen aus übereinstimmen [a-zA-Z0-9_] Sie können es also in etwas ändern [a-zA-Z] wenn du nur Buchstaben willst


1 für die Antwort № 2

Ich gehe davon aus, dass die Sprache Javascript ist (bitteüberprüfen Sie Ihre Tags). Das Problem, das ich sehe, ist, dass Ihr Regex die Leerzeichen enthält. Wenn Sie also "aa b c" haben, stimmt es mit "a" überein, aber c hat keine Leerzeichen vor oder nach sich.

var text=" a bb c dd e f g tt"
var re=/s*bwb/g //If you"re coding in Java, remove the g: "\s*\b\w\b"
text.replace(re,"") //" bb dd tt"