Рефакторинг регулярных выражений

топ 100 блогов _winnie25.08.2010 Рискую быть обвинённым в капитанстве, но всё-таки. Всё-таки я часто вижу нечитабельные регулярные выражения, причем не потому, что они регулярные, а потому что автор - макака.

Копипаст в регулярных выражениях - тоже можно рефакторить и сводить к многократному использованию уже определённой абстракции.

Вот есть у нас регулярка для последовательности пробелов \s+. И есть регулярка для числа, ([-+]?[\d]+). Нам надо извлекать числа из строк вроде "+123 -123 111:222:333". Легко сочинить монстра "([-+]?[\d]+)\s+([-+]?[\d]+)\s+([-+]?[\d]+):([-+]?[\d]+):([-+]?[\d]+)". Сочинить легко, прочитать и исправить сложно. А нужно для читаемости писать код так, как он в голове, а не транслировать его в копипаст. Можно такое регулярное выражение записать вот так:

"7 7 7:7:7".replace('7', r'([-+]?[\d]+)').replace(' ', r'\s+')


Тогда проще понять что имелось ввиду, исправить регулярное выражение. Как структуру первого уровня, например заменить "7 7 7:7:7" на "7:7:7:7". Так и второго, напр. матчить не только целые числа, но и дробные 123.456.

Оставить комментарий

Архив записей в блогах:
Икона Божией Матери, именуемая «Знамение» — знамение Пресвятой Богородицы, бывшее в Новгороде Великом в 1170 году. Икона Божией Матери, именуемая «Знамение», изображает Пресвятую Богородицу, сидящую и молитвенно подъемлющую руки Свои; на ...
Уважаемые знатоки! В этом вопросе замены выделены курсивом. Книга о нем переведена на очень многие языки. Но в переводе на вавилонский язык его имя начинается с вавилонской буквы, которой в вавилонском алфавите в классическую эпоху уже не было. А в переводе на ассирийский язык ...
Дорожники и строители - это ничуть не меньшая беда, чем две известных наших беды. В Тюмени было дано задание сделать велодорожку, а также детскую площадку. В общем, решили совместить. ...
У рейса United Airlines, следовавшего в Гонолулу, отказал двигатель, и ему пришлось вернуться в международный аэропорт Денвера вскоре после взлета в субботу днем. Рейс 328 благополучно приземлился без каких-либо сообщений о травмах. Все 231 пассажира и 10 членов экипажа целы. О ...
Тут господин Делягин на днях выдал статью под названием «Россия двинулась под откос по пути Украины – пока медленно». И, поскольку «майданы и антимайданы» это моя тематика, я решил отреагировать. Реакция будет из двух частей – анализ личности господина Делягина и анализ собственно ...