python: регулярные выражения, как найти строку неопределенной длины, которая имеет структуру и заканчивается определенной группой - PullRequest
0 голосов
/ 01 сентября 2010

Мне нужно создать регулярное выражение, чтобы соответствовать строкам, подобным этим 999-123-222 -...- 22 Строка может быть закончена как & Ns = (любое число) или без этого ... Так что действительные строки для меня

999-123-222-...-22
999-123-222-...-22&Ns=12
999-123-222-...-22&Ns=12

И следующее недопустимо:

999-123-222 -...- 22 & N = 1

Я уже несколько часов пробовал тестировать ...Но не удалось решить, действительно нужна помощь

Ответы [ 3 ]

1 голос
/ 01 сентября 2010

Не уверен, хотите ли вы буквально сопоставить 999-123-22-...-22 или это может быть любая последовательность цифр / тире.Вот два различных регулярных выражения:

/^[\d-]+(&Ns=\d+)?$/

/^999-123-222-\.\.\.-22(&Ns=\d+)?$/

Ключевой идеей является часть (&Ns=\d+)?$, которая соответствует необязательному &Ns=<digits> и привязана к концу строки с помощью $.

0 голосов
/ 01 сентября 2010

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

s = '999-123-222-...-22&Ns=12'
parts = s.split('&Ns=') # splits on Ns and removes it

Если перед номером «&» указан номер телефона, вы можете сделать еще одно разделение и получить код города и т. Д. В отдельных полях, например:

phone_parts = parts[0].split('-') # breaks up the digit string and removes the '-'
area_code = phone_parts[0]

Часть, найденная после необязательных '& Ns= 'можно проверить, является ли он числовым, с помощью строкового метода isdigit, который будет возвращать значение true, если все символы в строке являются цифрами и имеется хотя бы один символ, в противном случае - значение false.

if len(parts) > 1:
    extra_digits_ok = parts[1].isdigit()
0 голосов
/ 01 сентября 2010

Если вы просто хотите разрешить строки 999-123-222-...-22 и 999-123-222-...-22&Ns=12, вам лучше использовать строковую функцию.

Если вы хотите разрешить любые числа от -, вы можете использовать регулярное выражение:

^(\d+-){3}[.]{3}-\d+(&Ns=\d+)?$

Если числа должны состоять только из 3 цифр, а последний номер из 2 цифр, вы можете использовать:

^(\d{3}-){3}[.]{3}-\d{2}(&Ns=\d{2})?$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...