Wie kann ich text innerhalb von Klammern mit regex?
Habe ich folgende Muster:
(COMPANY) -277.9887 (ASP,) -277.9887 (INC.)
Möchte ich die Letzte Ausgabe zu sein:
FIRMA ASP, INC.
Derzeit habe ich folgenden code, und es hält die Rückgabe der ursprünglichen Muster ( ich nehme an, weil die Gruppe alles fällt zwischen dem ersten '(' und das Letzte ')'
Pattern p = Pattern.compile("((.*))",Pattern.DOTALL);
Matcher matcher = p.matcher(eName);
while(matcher.find())
{
System.out.println("found match:"+matcher.group(1));
}
Ich bin kämpfen, um die Ergebnisse zu bekommen die ich brauche und für jede Hilfe dankbar. Ich bin nicht besorgt über das verketten der Ergebnisse, nachdem ich Sie jeder Gruppe muss jede Gruppe.
InformationsquelleAutor northpole | 2009-08-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
InformationsquelleAutor chaos
Ihre .* Quantifizierer ist 'gierig', also ja, Sie schnappen alles, was zwischen der ersten und der letzten Klammer. Wie chaos sagt lapidar :), mit das .*? ein nicht gieriger Quantifizierer, so wird es greifen so wenig wie möglich, während immer noch die Aufrechterhaltung der Partie.
Und Sie müssen zu entkommen, die Klammern in regex, sonst wird es eine andere Gruppe. Das ist vorausgesetzt, es gibt Literale Klammern in Ihrem string. Ich vermute, was Sie nach der anfänglichen Frage, wie Ihr Muster ist in der Tat Ihre string.
Abfrage: "FIRMA", "ASP" und "INC." erforderlich?
Wenn Sie müssen die Werte für Sie, dann wollen Sie mit + statt *, der + 1-oder-mehr, die * null-oder-mehr, so * würden Sie übereinstimmen, wird die Zeichenkette "()"
zB: "((.+?))"
Sie kann und sollte möglicherweise versuchen, spezifischer zu sein als das '.' in die passenden Gruppen zu. Wenn die Zeichenfolge ist zu erwarten, dass nur Großbuchstaben und vielleicht die abgebildeten Satzzeichen, dann können Sie versuchen so etwas wie "\(([A-Z,.]+?)\)". Auf diese Weise dodgy Daten zumindest bemerkt und korrigiert werden können.
InformationsquelleAutor ptomli
Getestet mit Java 8:
/** * Unten-Muster gibt dem string in Klammern.
InformationsquelleAutor Chetan Laddha
Nicht eine direkte Antwort auf deine Frage, aber ich empfehle, verwenden Sie RegxTester man die Antwort und alle zukünftigen Frage schnell. Es ermöglicht Ihnen zu testen in realtime.
InformationsquelleAutor Oliver
Wenn deine Saiten sind immer Aussehen, die Sie bekommen konnte, Weg mit nur ein paar Anrufe zu replaceAll statt. Dies scheint für mich arbeiten:
Wahrscheinlich nicht die effizienteste Sache der Welt, aber ziemlich einfach.
InformationsquelleAutor Brent Writes Code