Python 如何在某些其他字符内替换多次出现的字符

Python 如何在某些其他字符内替换多次出现的字符,python,re,Python,Re,我有以下字符串: someTxt="ABC -type X | aas < ISCO | ABB | TTI > kjhkjh" 我试着分两步来做这件事(也许一步可以做得更好!),如下所示: htmlTagTxt = re.sub(r'\<(.*)\>', r'&lt; \1 &gt;', someTxt) print (htmlTagTxt) 现在我想在“|”字符之前添加反斜杠 cleanedHtmlTagTxt = re.sub

我有以下字符串:

someTxt="ABC -type X | aas < ISCO | ABB | TTI > kjhkjh"
我试着分两步来做这件事(也许一步可以做得更好!),如下所示:

htmlTagTxt = re.sub(r'\<(.*)\>', r'&lt; \1 &gt;', someTxt)
print (htmlTagTxt)
现在我想在“|”字符之前添加反斜杠

cleanedHtmlTagTxt = re.sub(r'(\|)',, r'\\\1', htmlTagTxt)   
print (cleanedHtmlTagTxt)
这将提供以下输出:

ABC -type X | aas &lt;  ISCO | ABB | TTI  &gt; kjhkjh
ABC -type X \| aas &lt;  ISCO \| ABB \| TTI  &gt; kjhkjh
但是,我只想在“|”字符位于内的位置添加一个反斜杠,因此不应更改“-type X”后面的第一个“|”字符。
不幸的是,我不理解指出这一点所需的语法。有人能解释一下如何做到这一点以及背后的一些逻辑吗?

IIUC,您可以使用html和正则表达式的组合:

ABC -type X \| aas &lt;  ISCO \| ABB \| TTI  &gt; kjhkjh
from html import escape
import re

someTxt = "ABC -type X | aas < ISCO | ABB | TTI > kjhkjh"


def replacement(match):
    """This function escapes every | inside the string"""
    return re.sub(r"\|", re.escape("|"), match.group())


# change the text inside < and > using replacement
newText = re.sub(r"<.*?>", replacement, someTxt)

# use html escape to convert < > to &lt; &gt;
result = escape(newText)
print(result)
ABC -type X | aas &lt; ISCO \| ABB \| TTI &gt; kjhkjh