Повторяющийся шаблон Java Захват групп - PullRequest
0 голосов
/ 01 марта 2012

У меня есть следующая строка

52x10x20x30x40

Строка может быть расширена, но с тем же шаблоном, и с обеих сторон будут другие строки: например,

"Hello something 52x10x20x30x40 bla bla bla"

я хочу захватить все 2 цифры.

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

Pattern.compile("(\\d\\d)([x]\\d\\d)+");

Но с этим регулярным выражением я получаю только следующие группы:

1: 52
2: x40

Ответы [ 3 ]

4 голосов
/ 01 марта 2012

Почему бы просто:

"52x10x20x30x40".split("x");

Забыл упомянуть, что с обеих сторон могут быть другие строки.

Вы можете найти "\\d{2}(x\\d{2})+" и использовать split("x") для совпадения.

0 голосов
/ 01 марта 2012

Если вы просто хотите захватить все двузначные числа, вы можете использовать это выражение:

(?<!\d)(\d\d)(?!\d)

Обычно вы можете получить только последнюю подстроку, которой соответствует повторяющаяся группа захвата. (.NET regex отличается в этом отношении.)

0 голосов
/ 01 марта 2012

Regex не поддерживает переменные длины групп.

Вместо этого используйте метод разделения, например, Гуава Splitter:

Iterable<String> tokens = Splitter.on('x').split(str);
...