Как объединить несколько регулярных выражений в одно?
Необходимо было добавить пробелов между математическими знаками /*+- в строке eq = 'a+b-c/d*30' и я не придумал, к сожалению ничего лучшего кроме как:
eq_new = re.sub(r'[-]', ' - ', eq)
eq_new = re.sub(r'[+]', ' + ', eq_new)
eq_new = re.sub(r'[/]', ' / ', eq_new)
eq_new = re.sub(r'[*]', ' * ', eq_new)
Но это явно противоречит DRY. Подскажите, пожалуйста, можно ли как-то сделать из 4х этих выражений одно? Спасибо!
Ответы (2 шт):
Автор решения: timur
→ Ссылка
А не проще с помощью str.replace?
s = 'a-a+a/a*a'
replaceable = ('+', '-', '/', '*')
for i in replaceable:
s = s.replace(i, f' {i} ')
Автор решения: Wiktor Stribiżew
→ Ссылка
Используйте
re.sub(r'[-+/*]', r' \g<0> ', text)
См. пример работы регулярного выражения. [-+/*] находит -, +, / или *, а \g<0> подставляет текст целого совпадения.
Если пробелы уже существуют в некоторых местах, то можно использовать
re.sub(r'\s*([-+/*])\s*', r' \1 ', text)
Подробности
\s*- 0 и более пробельных символов([-+/*])- Захватывающая подмаска №1 (\1подставляет текст, захваченный этой подмаской, в шаблоне замены):-,+,/или*\s*- 0 и более пробельных символов