ось - Win XP SP3
питон - 2.7
Предмет анализа - одна строка с произвольным набором символов, читающихся как номер телефона с пояснениями. Номер в международном формате набора в Украине: +3, код Украины - 8, код города или мобильного опер-а - XXX, собственно семизначный номер или дополненный до семи цифр если он меньше - XXXXXXX. Кроме того порядок расположения, количество и вид разделителей цифр абсолютно не предсказуем. А еще могут присутствовать фразы пояснений как перед телефонным номером так и за ним.
Следующее регулярное выражение позволяет выделить такие телефонные номера, пользовался методом findall скомпилированного объкта регулярного выражения, тестирование было проведено на более чем 400 разновидных строках:
(?:(?:(?:\+)3)[-\(\) /]{0,3}8)[-\(\) /]{0,3}0[-\(\) /]{0,3}\d\d[-\(\) /]?[-\(\) /]{0,3}\d[-\(\) /]{0,3}\d[-\(\) /]{0,3}\d[-\(\) /]{0,3}\d[-\(\) /]{0,3}\d[-\(\) /]{0,3}\d[-\(\) /]{0,3}\dБросается в глаза повтояющийся фрагмент в последней части выражения, вернее он повторяется 7 раз:
[-\(\) /]{0,3}\dзамена семикратного повторения фрагмента1 записью вида:
([-\(\) /]{0,3}\d){7}желаемого результата не дает в действующем диалекте питона, хотя тестовый автомат на VB.NET из книги Бена Форта и RegExr на сайте http://gskinner.com/RegExr/ воспринимают такую запись (фрагмент2) действительно как семикратное повторение фрагмента1 в полном выражении и находят искомые подстроки.
Еще не дочитал Дж.Фридла, потому вопрос к знатокам: можна ли сократить запись полного выражения для диалекта питона? … уж очень длиннО…
… что то не так я понял в механизме рег.выражений питона… наверное