YARP.(Да, еще одна проблема с регулярным выражением).
Не уверен, что самый ясный способ описать это, кроме конкретных примеров.
Пример текста:
- 4444 4444 4444 4444
- 4444444444444444
- 44 44 44 44 44 44 44 44
- 4444-4444-4444-4444
- 4444 (несколько пробелов) 4444 (несколько пробелов) 4444(несколько пробелов) 4444
- 0.4444444444444444
- 0.4444 4444 4444 4444
Мне нужно построить регулярное выражение, которое будет соответствовать только 1, 2 и 4.Требования 13-16 цифр, тире и пробелов необязательны, но только если один пробел и не более 3.
Это, очевидно, связано с поиском информации CC, и я провел массу исследований, обнаружил многопримеры, которые находят совпадения для большинства, все или ничего, но ничего, что устраняет чрезмерные ложные срабатывания, как 3 и 5 выше.Я использую PowerGREP 5, я прочитал весь учебник по https://www.regular -expressions.info / tutorial.html и не могу понять, как ограничить количество дополнительных пробелов в общем совпадении,то есть: «1 2 3 4 5 6 7 8 9» совпадает так же, как и «123 456 789», если я делаю пробел (ы) необязательным.По сути, я хочу, чтобы регулярное выражение заканчивало поиск совпадений, если обнаружено более 3 пробелов / тире.
Примечание: я работаю в компании, которая работает с ТОННОЙ массой календарных данных, поэтому копирование большого диска со многими текстовыми строками в стиле "1 2 3 4 5 6 7 8 ..." создает тоннуложных попаданий, даже если я потрачу время на адаптацию поиска к шаблонам с включенным CC.
Любая помощь будет очень признательна.
Ближайшее, что я нашел:
\b(?:\d[ -]*?){13,16}\b
Который захватывает любые 13-16 цифр (с учетом тире или пробела между ними), как и ожидалось, но также соответствует "1 2 3 4 5 6 7 8 9 10 11", что, очевидно, не полезно.
Регулярное выражение "все включено" CC, которое не может найти действительные номера, если они содержат пробелы / тире: (но найдет номера телефонов в Великобритании, хе):
\b(?:4[0-9]{12}(?:[0-9]{3})?|(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35\d{3})\d{11})\b
Итак, я попытался заменить любой[0-9] экземпляры класса символов выше с (?: \ D [-] *?), Которые найдут действительные CC с тире / пробелами, но они также соответствуют всем "1 2 3 4 5 6 7 8 9 10 11"введите ложные срабатывания.
Я очень плохо знаком с регулярным выражением, поэтому, если я совершаю огромную ошибку noob, пожалуйста, не стесняйтесь указывать мне в правильном направлении.Спасибо!
Редактировать:
Замена [0-9] на (?: \ D [-]?) Только для больших последовательных частей строки, кажется, довольно близко к тому, что мне нужно,Выключил тот же диск, что и раньше, и получил только 311 совпадений, и все 3 найденных положительных файла, я могу жить только с 308 ложными совпадениями, но я должен представить, что есть еще лучший способ сделать это.И он по-прежнему соответствует строкам из 13-16 цифр с более чем 3 разделителями ...
Текущее регулярное выражение:
\b(?:4(?:\d[ -]?){12}(?:[0-9]{3})?|(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)(?:\d[ -]?){12}|3[47](?:\d[ -]?){13}|3(?:0[0-5]|[68][0-9])(?:\d[ -]?){11}|6(?:011|5[0-9]{2})(?:\d[ -]?){12}|(?:2131|1800|35\d{3})(?:\d[ -]?){11})\b