Как разрешить определенные разделители между числовым шаблоном - PullRequest
0 голосов
/ 04 июля 2019

У меня есть большой шаблон регулярных выражений Java, состоящий из нескольких подшаблонов, объединенных OR (|).Я хочу разрешить использование нескольких разделителей где угодно между числами.

Например, у меня есть следующий шаблон "(3[47][0-9]{13})|(56022[1-5][0-9]{10}|(5610)[0-9]{12})".Как разрешить следующие разделители: равно (=), обратный слеш (\), точка (.), дефис (-) и пробел ().

Эти разделители могут появляться где угодно (кроме начала и конца) и любое количество раз между числами, которые соответствуют числовому шаблону.

1 Ответ

0 голосов
/ 04 июля 2019

Вам нужно будет вставить шаблон [\s=\\.-]* (он соответствует нулю или большему количеству пробелов, =, \, . и -) между всеми шаблонами сопоставления цифр и преобразовать \d{X} в \d(?:[\s=\\.-]*\d){X-1} выкройки:

(3[\s=\\.-]*[47][\s=\\.-]*[0-9](?:[\s=\\.-]*[0-9]){12})|(5[\s=\\.-]*6[\s=\\.-]*0[\s=\\.-]*2[\s=\\.-]*2[\s=\\.-]*[1-5][\s=\\.-]*[0-9](?:[\s=\\.-]*[0-9]){9}|(5[\s=\\.-]*6[\s=\\.-]*1[\s=\\.-]*0)[\s=\\.-]*[0-9](?:[\s=\\.-]*[0-9]){11})

См. Демонстрационную версию regex

Не забудьте удвоить обратную косую черту при использовании шаблона внутри строкового литерала Java:

String part_of_regex = "(3[\\s=\\\\.-]*[47][\\s=\\\\.-]*[0-9](?:[\\s=\\\\.-]*[0-9]){12})|(5[\\s=\\\\.-]*6[\\s=\\\\.-]*0[\\s=\\\\.-]*2[\\s=\\\\.-]*2[\\s=\\\\.-]*[1-5][\\s=\\\\.-]*[0-9](?:[\\s=\\\\.-]*[0-9]){9}|(5[\\s=\\\\.-]*6[\\s=\\\\.-]*1[\\s=\\\\.-]*0)[\\s=\\\\.-]*[0-9](?:[\\s=\\\\.-]*[0-9]){11})";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...