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 № 1Ihr Regex funktioniert folgendermaßen:
finden space
dann ein Zeichen, dann ein anderes space
und 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"