Wenn Sie in Java ein replaceAll ausführen, suchen Sie nach einem regulären Ausdrucksmuster wie:
replaceAll("\\?i\\b(\\w+)\\b(\\s+\\1)+\\b", "$1");
(um doppelte aufeinanderfolgende Wörter zu entfernen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird, z. B. Testtest), bin ich mir nicht sicher, wo ich das ablege ?i
. Ich habe gelesen, dass es am Anfang sein soll, aber wenn ich es herausnehme, fange ich doppelte aufeinanderfolgende Wörter (z. B. Testtest), aber keine Wörter, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird (z. B. Testtest). Also dachte ich, ich könnte das? I am Anfang hinzufügen, aber das scheint den Job nicht zu erledigen. Irgendwelche Gedanken? Vielen Dank!
java
regex
case-sensitive
Kristall
quelle
quelle
Antworten:
RegexBuddy sagt mir, wenn Sie es am Anfang einfügen möchten, ist dies die richtige Syntax:
quelle
Mit der Konstante Pattern.CASE_INSENSITIVE können Sie auch Regexs ohne Berücksichtigung der Groß- und Kleinschreibung abgleichen und die Lesbarkeit verbessern.
quelle
Pattern.compile(myregex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE)
(?i)
Ding, Java-Regexe waren bereits ziemlich unlesbar: SJa, Groß- und Kleinschreibung kann in Java Regex nach Belieben aktiviert und deaktiviert werden.
Es sieht so aus, als ob Sie so etwas wollen:
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"
.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:Im Allgemeinen können Sie jedes Flag innerhalb des Musters nach Ihren Wünschen aktivieren und deaktivieren.
Siehe auch
java.util.regex.Pattern
/regex/i
(Pattern.CASE_INSENSITIVE
in Java) können Sie dies tun/(?i)regex/
/first(?i)second(?-i)third/
/first(?i:second)third/
\b
zwischen a\w
und a\s
)Verwandte Fragen
quelle
Wenn bei Ihrem gesamten Ausdruck die Groß- und Kleinschreibung nicht berücksichtigt wird, können Sie einfach das
CASE_INSENSITIVE
Flag angeben :quelle
Sie können auch Ihre anfängliche Zeichenfolge, die Sie auf Musterübereinstimmung prüfen, in Kleinbuchstaben führen. Und verwenden Sie in Ihrem Muster jeweils Kleinbuchstaben.
quelle