2016-08-03 2 views
1

Я пытаюсь получить некоторую ценность внутри текста с регулярным выражением.Как найти что-то между строкой и двумя точками?

Пример текста:

Comision 002 ................... 50,00 ........ 15,060000 ........ ....... 753,00 IVA 21%

Я хотел бы получить: 753.00

I'm, используя это регулярное выражение:

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

проблема заключается в том, что это регулярное выражение вывода:

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

Итак, я предположим, что первый раз, когда двигатель находит две точки (..) устанавливает предел.

То, что я хочу, и не сможешь решительность это что-то вроде: «найти слова„IVA 21%“, а затем оглянуться назад и принести мне все данные, пока вы видите две точки вместе»

I'm новый в мире регулярных выражений, поэтому любая помощь ценится.

+0

Что-нибудь известно о структуре значения до 'IVA'? Потому что если его десятичное число, '\. \. (\ D + \. \ D +) IVA 21% $' можно использовать как стартер. – dhke

ответ

2

Вы можете использовать это регулярное выражение, чтобы захватить ваш номер:

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

ReEx Demo

В своем регулярном выражении отрицательной просмотра назад (?<=\.\.) будет утверждать первые две точки на входе, которые являются сразу после 002.

+0

Бинго! Большое спасибо человеку. Не могли бы вы объяснить, как вы его достигаете, поэтому ясно, что для дальнейшей модификации? –

+0

'\\ d + (?: \\. \\ d +)?' - общий шаблон регулярного выражения для захвата целого числа или десятичного числа. и '(? = ...)' выглядит так, что вы уже находитесь в своем регулярном выражении. – anubhava

0

Вы можете использовать первую группу следующего регулярного выражения.

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

Demo

Смежные вопросы