如何在其他一些字符中替换多次出现的字符

How to replace multiple occurrences of character when inside some other characters

我有以下字符串:

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

我想把它转换成下面这样:

ABC -type X | aas &lt; ISCO \| ABB \| TTI &gt; kjhkjh

我正在尝试分两步完成(也许一步完成更好!),如下:

htmlTagTxt = re.sub(r'\<(.*)\>', r'&lt;  &gt;', someTxt)
print (htmlTagTxt)

这给出了以下输出:

ABC -type X | aas &lt;  ISCO | ABB | TTI  &gt; kjhkjh

现在我想在'|'之前添加反斜杠字符。

cleanedHtmlTagTxt = re.sub(r'(\|)',, r'\', htmlTagTxt)   
print (cleanedHtmlTagTxt)

这给出了以下输出:

ABC -type X \| aas &lt;  ISCO \| ABB \| TTI  &gt; kjhkjh

但是,我只想在“|”的位置添加一个反斜杠字符在 < 和 > 里面 所以第一个 '|'不应更改“-type X”之后的字符。 不幸的是,我不明白指示这一点所需的语法。有人可以解释如何执行此操作及其背后的一些逻辑吗?

IIUC,您可以使用 html escape and regex escape:

的组合
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