Ищем регулярное выражение для экранирования специального набора символов - PullRequest
0 голосов
/ 08 октября 2019

Цель состоит в том, чтобы заменить символы в строке, такие как _ и *, которые играют особую роль в Markdown, на \\_ и \\* соответственно.

Мой текущий метод выглядит следующим образом:

text = "Text *here* should be _formatted_"
specials = ["*", "_"]
for char in specials:
    text = text.replace(char, f"\\{char}")

Интересно, есть ли альтернативный способ достижения этой функциональности с помощью регулярных выражений.

1 Ответ

4 голосов
/ 08 октября 2019

Это можно использовать в функции re.sub () для экранирования специальных символов
, которые еще не экранированы.

r"(?<!\\)((?:\\\\)*)([*_])"

https://regex101.com/r/8LNp5E/1

Пример Python

>>> import re
>>> target = (
...    r"The goal is to replace characters in string such as _ and * in that have" + "\n"
...    r"special role in Markdown \\_ and \\*  and  \_ and \* ." + "\n"
...   )
>>>
>>> res = re.sub( r"(?<!\\)((?:\\\\)*)([*_])", r"\1\\\2", target )
>>>
>>> print ( res )
The goal is to replace characters in string such as \_ and \* in that have
special role in Markdown \\\_ and \\\*  and  \_ and \* .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...