Я хочу разработать регулярное выражение в Python, где компонент шаблона определяется в отдельной переменной и на лету объединяется в одну строку с помощью Python .format()
строкового метода. Упрощенный пример поможет уточнить. У меня есть ряд строк, где пространство между словами может быть представлено пробелом, подчеркиванием, дефисом и т. Д. c. В качестве примера:
new referral
new-referal
new - referal
new_referral
Я могу определить строку регулярного выражения для соответствия этим возможностям как:
space_sep = '[\s\-_]+'
(дефис экранирован, чтобы гарантировать, что он не интерпретируется как определение диапазона символов .)
Теперь я могу построить большее регулярное выражение, чтобы оно соответствовало приведенным выше строкам, используя:
myRegexStr = "new{spc}referral".format(spc = space_sep)
Преимущество этого метода для меня состоит в том, что мне нужно определить множество достаточно сложных регулярных выражений, где может быть несколько разных часто встречающихся укусов, которые встречаются несколько раз и в непредсказуемом порядке; предварительное определение часто используемых шаблонов облегчает чтение регулярных выражений и позволяет очень легко редактировать строки.
Однако возникает проблема, если я хочу определить число вхождений других символов с помощью {m,n}
или {n}
структура. Например, чтобы учесть общую опечатку в написании «реферал», мне нужно разрешить 1 или 2 вхождения буквы «r». Я могу отредактировать myRegexStr
следующим образом:
myRegexStr = "new{spc}refer{1,2}al".format(spc = space_sep)
Однако теперь все виды вещей ломаются из-за путаницы из-за использования фигурных скобок (либо KeyError
в случае {1,2}
, либо IndexError: tuple index out of range
в случае {n}
).
Есть ли способ использовать строковый метод .format()
для построения более длинных регулярных выражений, в то же время имея возможность определять количество вхождений символов с помощью {n,m}