我正在编写一个Python脚本,它将纯文本作为输入并生成
将代码作为输出。在某些时候,脚本必须引用所有
在TeX中具有特殊含义的字符,例如%
、&
、\
,等等
打开。你知道吗
这比我预料的要难。目前我有:
def ltx_quote(s):
s = re.sub(r'[\\]', r'\\textbackslash{}', s)
# s = re.sub(r'[{]', r'\\{{}', s)
# s = re.sub(r'[}]', r'\\}{}', s)
s = re.sub(r'[&]', r'\\&{}', s)
s = re.sub(r'[$]', r'\\${}', s)
s = re.sub(r'[%]', r'\\%{}', s)
s = re.sub(r'[_]', r'\\_{}', s)
s = re.sub(r'[\^]', r'\\^{}', s)
s = re.sub(r'[~]', r'\\~{}', s)
s = re.sub(r'[|]', r'\\textbar{}', s)
s = re.sub(r'[#]', r'\\#{}', s)
s = re.sub(r'[<]', r'\\textless{}', s)
s = re.sub(r'[>]', r'\\textgreater{}', s)
return s
问题是{
和}
字符,因为它们可能是由较早的替换(\
->;\textbackslash{}
)产生的,在这种情况下不应该被替换。我认为解决办法是一步到位,但我不知道怎么做。你知道吗
或许可以尝试使用未记录的re.Scanner:
收益率
与您发布的代码不同,如果您查看the source code,则重新扫描只对字符串进行一次传递。一旦比赛结束,下一场比赛就从最后一场比赛结束的地方开始。你知道吗
re.Scanner
的第一个参数是一个lexicon
二元组列表。每个2元组是一个正则表达式模式和一个动作。操作可以是字符串、可调用(函数)或None
(无操作)。你知道吗这些模式都被编译成一个复合模式。因此模式在词典中的排列顺序很重要。第一个匹配的模式获胜。你知道吗
如果进行了匹配,则如果该操作是可调用的,则调用该操作;如果是字符串,则仅返回该操作。返回值在列表
tokens
中收集。你知道吗相关问题 更多 >
编程相关推荐