Regex захватывает в Java как в C # - PullRequest
5 голосов
/ 05 июня 2011

У меня есть возможность переписать часть существующей программы на C # / .NET с использованием Java.Я не очень хорошо разбираюсь в Java, и мне не хватает чего-то, что обрабатывает регулярные выражения, и я просто хотел узнать, что я что-то упускаю или Java просто не предоставляет такую ​​возможность.

У меня есть данные типа

2011:06:05 15:50\t0.478\t0.209\t0.211\t0.211\t0.205\t-0.462\t0.203\t0.202\t0.212

Шаблон Regex, который я использую, выглядит следующим образом:

?(\d{4}:\d{2}:\d{2} \d{2}:\d{2}[:\d{2}]?)\t((-?\d*(\.\d*)?)\t?){1,16}

В .NET я могу получить доступ к значениям после сопоставления, используя match.Group[3].Captures[i].

В Java у меня естьничего подобного не нашел.matcher.group(3) просто возвращает пустую строку.

Как мне добиться поведения, подобного тому, к которому я привык из C #?

1 Ответ

3 голосов
/ 05 июня 2011

Как я уже упоминал в комментариях, Java будет возвращать только последнее значение соответствия с несколькими значениями группы. Поэтому вы должны сначала использовать регулярное выражение, чтобы изолировать последнюю часть вашей строки со значениями:

strg = "0.478\t0.209\t0.211\t0.211\t0.205\t-0.462\t0.203\t0.202\t0.212"

, а затем просто разделить вкладки:

String[] values = strg.split("\\t");

...