/ / Java: RegEx mehrere Übereinstimmungen im gleichen 'Fragment' - Java, Regex

Java: RegEx mehrere Übereinstimmungen im selben 'Fragment' - Java, Regex

Ich versuche, eine RegEx zu schreiben, die beide Instanzen von "CSV" durch Kommata getrennt in der Zeichenfolge "CSV, CSV, CSV, CSV" erfassen und durch "Xml" ersetzen würde.

Meine Ausgabe wäre also "csv, xml, xml, csv".

Das Problem, auf das ich stoße, ist mein RegExerfasst nur die erste Instanz von csv und da das "Komma" am Ende der ersten Übereinstimmung auch das erste Trennzeichen der zweiten Übereinstimmung ist, wird es nicht erfasst.

RegEx = ", csv," (ziemlich einfaches Beispiel).

Beispiel 2:

RegEx = "(, Hund,)"

Eingabe "Hund, Hund, Hund, Hund"

Ausgabe "Hund, Katze, Katze, Hund"

Bearbeiten: Ich habe gefunden, was ich gesucht habe, mit Lookahead und Lookbehind. RegEx = "(? <=,) Hund (? =,)" Würde den Trick machen.

Antworten:

0 für die Antwort № 1

Verwenden Sie LookArounds, die behaupten, aber nicht konsumieren:

String replaced = str.replaceAll("(?<=,)csv(?=,)", "xml");

0 für die Antwort № 2

Nutzen Sie Lookaround:

ersetzen

(?<=,)xml(?=,)

mit

csv

Demo https://regex101.com/r/ft7SQT/1