Проверка Java RegEx на наличие одной или нескольких отформатированных строк - PullRequest
0 голосов
/ 15 декабря 2010

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

Вот мой текущий REGEX-> (для ясности удалены дублирующие косые черты)

([AZ \ д] {3} - [AZ \ д] {5} - [AZ \ д] {2}) (:: (.?) [AZ \ д] {3} - [AZ \d] {5} - [AZ \ d] {2}).

Я знаю, что я близко, но не совсем там.

Таким образом, они действительны

TEST1: 001-12345-67: ABC-DEFGH-IJ

возвращено как TEST1, 001-12345-67,: ABC-DEFGH-IJ (запятые в отдельных группах)

WHATEVER: 123-12345-12: 987-98765-98: ASD-ASDFA-AS (текущее регулярное выражение для этого не работает)

возвращается как WHATEVER, 123-12345-12,: 987-98765-98: ASD-ASDFA-AS

Иэто не

TEST1: 001-12345-67

WHATEVER: 123-12345-12: HMMMM

Как будто мне нужно сделать скобку с '.'для всей второй последовательности.Спасибо всем за созерцание.PS Regex заставляет мою голову болеть.

1 Ответ

0 голосов
/ 15 декабря 2010

Я бы сделал что-то вроде этого:

/(.*?(?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}){2,})/

А затем разделите захваченный текст на «:», чтобы получить отдельные фрагменты.

РЕДАКТИРОВАТЬ: Подождите, вы просто хотите три порции, независимо от того, сколько групп? Это довольно легко. Вы можете получить его, позвонив по номеру split(':', 3) (а не просто split(':') по результатам вышеупомянутого, или перейдя к решению регулярного выражения:

/(.*?):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})((?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})+)/

(Третья группа будет начинаться с лишних «:», которые вам не нужны, которые можно удалить, если вы не возражаете против раздувания шаблона еще больше):

/(.*?):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}(?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})*)/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...