Ja, Groß- und Kleinschreibung kann in Java Regex nach Belieben aktiviert und deaktiviert werden.
Es sieht so aus, als ob Sie so etwas wollen:
System.out.println(
"Have a meRry MErrY Christmas ho Ho hO"
.replaceAll("(?i)\\b(\\w+)(\\s+\\1)+\\b", "$1")
);
// Have a meRry Christmas ho
Beachten Sie, dass das eingebettete Pattern.CASE_INSENSITIVE
Flag (?i)
nicht ist \?i
. Beachten Sie auch, dass eine überflüssige \b
aus dem Muster entfernt wurde.
Das (?i)
wird am Anfang des Musters platziert, um die Groß- und Kleinschreibung nicht zu berücksichtigen. In diesem speziellen Fall wird es später im Muster nicht überschrieben, sodass das gesamte Muster die Groß- und Kleinschreibung nicht berücksichtigt.
Es ist erwähnenswert, dass Sie die Groß- und Kleinschreibung in der Tat nur auf Teile des gesamten Musters beschränken können. Daher hängt die Frage, wo es platziert werden soll, wirklich von der Spezifikation ab (obwohl es für dieses spezielle Problem keine Rolle spielt, da \w
die Groß- und Kleinschreibung nicht berücksichtigt wird.
Um zu demonstrieren, hier ist ein ähnliches Beispiel von Läufen von Buchstaben wie kollabiert "AaAaaA"
nur "A"
.
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("(?i)\\b([A-Z])\\1+\\b", "$1")
); // A e I O u
Nehmen wir nun an, wir geben an, dass der Lauf nur reduziert werden soll, wenn er mit einem Großbuchstaben beginnt. Dann müssen wir das (?i)
an der richtigen Stelle platzieren:
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("\\b([A-Z])(?i)\\1+\\b", "$1")
); // A eeEeeE I O uuUuUuu
Im Allgemeinen können Sie jedes Flag innerhalb des Musters nach Ihren Wünschen aktivieren und deaktivieren.
Siehe auch
Verwandte Fragen