【发布时间】:2020-09-27 18:14:23
【问题描述】:
我正在尝试“解析”一些 LaTeX 代码。 LaTeX 使用了一些特殊字符,例如%、#、{、},并用$ … $ 分隔内联数学环境。
我需要的是转义 (\) 所有尚未转义且 不在 内的特殊字符 $ … $。
例如,对于提供的条目
#s{o}me\%thing $ \text{a} $
我需要返回:
\#s\{o\}me\%thing $ \text{a} $
请注意,已经转义的 \% 以及 $ … $ 中的 \text{a} 保持不变。
我正在使用 Python 的 re.sub 来做到这一点,这样我可以忽略转义的,但我不知道如何忽略 $ … $ 环境。我当前的代码是:
string = "#s{o}me\%thing $ \text{a} $"
re.sub(r'([^\\]?)((?:%|#|{|}|&))', r"\1\\\2", string)
# Expected output: "\#s\{o\}me\%thing $ \text{a} $"
# Actual output: "\#s\{o\}me\%thing $ \text\{a\} $"
此时,对于上面的示例,我的代码返回以下内容:
\#s\{o\}me\%thing $ \text\{a\} $
有什么建议吗??
【问题讨论】:
标签: python regex string replace