2016-08-03 21 views
1

Ich versuche, einen Wert innerhalb eines Textes mit Regex zu bekommen.Wie findet man etwas zwischen einem String und zwei Punkten?

Textbeispiel:

COMISION 002 ................... 50.00 ........ 15,060000 ........ ....... 753,00 IVA 21%

Ich mag würde erhalten: 753,00

Ich bin dieses regex:

Pattern pattern = Pattern.compile("(?<=\\.\\.)(.*)(?=IVA 21 %)"); 

Das Problem ist, dass diese regex ausgibt:

................. 50,00 ........ 15.060000 ............... 753,00

Also ich gehe davon aus, dass beim erstmaligen Auffinden der beiden Punkte (..) durch den Motor ein Grenzwert gesetzt wird.

Was ich will und KANN NICHT Entschlossenheit ist so etwas wie: „finden die Worte‚IVA 21%‘, dann zurückblicken und bringt mir alle Daten, bis Sie zwei Punkte zusammen sehen“

ich bin Neu in der Regex-Welt, so dass jede Hilfe geschätzt wird.

+0

Alles über die Struktur des Wertes vor 'IVA' bekannt? Wenn es eine Dezimalzahl ist, kann '\. \. (\ D + \. \ D +) IVA 21% $' als Starter verwendet werden. – dhke

Antwort

2

können Sie diese Regex verwenden, um Ihre Nummer zu erfassen:

\\d+(?:\\.\\d+)?(?= IVA 21 %) 

ReEx Demo

In Ihrem regex negativen Lookbehind (?<=\.\.) wird in der Eingangs ersten beiden Punkten behaupten, die direkt nach 002.

+0

Bingo! Vielen Dank Alter. Können Sie erklären, wie Sie es erreichen, so dass es für weitere Änderungen klar ist? –

+0

'\\ d + (?: \\. \\ d +)?' Ist ein generisches Regex-Muster, um eine ganze Zahl oder Dezimalzahl zu erfassen. und '(? = ...)' ist Vorausschau, die Sie bereits in Ihrer Regex haben. – anubhava

0

Sie könnten die erste Gruppe der folgenden Regex verwenden.

(\d+.\d+) IVA 21 % 

Demo

Verwandte Themen