Последовательные, противоречивые замены регулярных выражений - PullRequest
0 голосов
/ 23 июля 2010

Я пробовал это курсивом:

r = re.compile(r"(\*[^ ]+\*)")
r.sub(r'<i>"\1"</i>', foo)

, но это не работает, так как я уверен, что любой в регулярном выражении знает, увидит сразу.

Ответы [ 2 ]

2 голосов
/ 23 июля 2010

Это легко сработает, если вы поменяете порядок замен. Обработка жирного шрифта в первую очередь предотвратит переход курсива.

1 голос
/ 23 июля 2010

Ваше регулярное выражение и замена требуют нескольких настроек.

r = re.compile(r"(\*[^ ]+\*)")

Здесь вы снимаете слишком много - звездочки сохраняются в \1.

r.sub(r'<i>"\1"</i>', foo)

Вы подставляете здесь слишком много - двойные кавычки включены в подстановку. Пример:

r.sub(r'<i>"\1"</i>', '*foo*')  # -> '<i>"*foo*"</i>'

Попробуйте что-то вроде этого:

foo = '***foo***'
bold = re.compile(r'''\*\*([^ ]+)\*\*''')
ital = re.compile(r'''\*([^ ]+)\*''')

ital.sub(r'''<i>\1</i>''', bold.sub(r'''<b>\1</b>''', foo)) # '<b><i>foo</i></b>'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...