Задать вопрос

Как правильно написать regexp?

В общем мне необходимо найти все строки локализации в шаблоне, где бывает, использую разные кавычки, написал скриптик, но вот в чем проблема
import re
text = """<input value="0" >{{ _('Root') }}
<input value="1" >{{ _("Test's") }}
<input value="{{ _('Move') }}" name="submit">"""
regx = re.compile(r"""_\((["'])([^\1]*)\1\)""")
regx.findall(text)

Такой regexp почему-то не работает.
Если делаю так:
regx = re.compile(r"""_\((["'])([^'"]*)\1\)""")
regx.findall(text)

Естественно не находит вторую строчку, натыкаясь на одинарную кавычку.

Собственно вопрос:
Как правильно написать regexp и почему не работает мой?
  • Вопрос задан
  • 3141 просмотр
Подписаться 4 Оценить Комментировать
Решения вопроса 1
sets88
@sets88 Автор вопроса
В общем решение такое:
regx = re.compile(r"""_\((['"])((?:(?!\1).)+)\1\)""")

Благодарю Vintorez за помощь!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Vintorez
@Vintorez
Вот так:
regx = re.compile(r"""_\(['"](?P<value>.+)['"]\)""")
Ответ написан
Vintorez
@Vintorez
Мне кажется проверка на двойные и одинарные кавычки внутри это лишнее. Я думаю, вам будет достаточно написать так: regx = re.compile(r"""_\(.*\)""")
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы