Регулярное выражение на номера различных документов
Есть документы, где их номер может колебаться от таких сложных значений, как: Г-053425, 58525-GH, 8683-4139, АВ-432433, АВ-2342-КП-211, 4543-КЕ-343.2146, С-RU.АЛ43.В.64664, RU P001 П000116, так и простых перечислений чисел № 20201010, 76864963247
Проблема в том, что не могу написать регулярное выражение, подходящее заданным условиям. Допустим, я написал на номер Г-053425 регулярку: [аА-яЯ,aA-zZ]{1,4}[. -]{0,1}[0-9]{1,14} , как мне применить ее уже на номер 58525-GH ведь выражение уже будет искать сначала вхождение букв? Можно конечно так [аА-яЯ,aA-zZ]{0,4}[. -]{0,1}[0-9]{1,14}[. -]{0,1}[аА-яЯ,aA-zZ]{0,4} но есть ли более элегантное решение? Чтобы эти комбинации проверки чисел и букв со знаками разделителями[.- ] чередовались
Проследил несколько закономерностей в этих номерах:
- Количество последовательных букв(используются одновременно латиница и кириллица) не может превышать 4
- Сам номер документа не может быть меньше 4 символов и превышать больше 20.
- Номер разделяется на блоки в основном из таких символов: [-.пробел] , реже: [\/]
С учетом ответа от roddar92 у меня получилось так, но решение пока далеко до истины
(?:[а-яА-Я,a-zA-Z]{0,4}[-.]{0,1})+(?:\d{2,15}[-.]{0,1})+
Ответы (1 шт):
Сразу следует отметить то, чтобы работать с алфавитным диапазоном, то надо поменять следующее правило:
[аА-яЯ] => [а-яА-Я]
Чтобы повторить группу символов (к примеру, чисел через дефис) более одного раза, надо воспользоваться оператором +:
(?:[-. ]\d{3,})+