Python TeX输入的引号字符串
我正在编写一个Python脚本,它将纯文本作为输入并生成 将代码作为输出。在某些时候,脚本必须引用所有 在TeX中具有特殊含义的字符,例如Python TeX输入的引号字符串,python,string,tex,quoting,Python,String,Tex,Quoting,我正在编写一个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.s
%
,&
,\
,等等
开
这比我想象的要难。目前我有:
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
def ltx\u报价:
s=re.sub(r'[\\]',r'\\text反斜杠{}',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'\\textgreater{}',s)
返回s
问题在于
{
和}
字符,因为它们可能是由较早的替换(\
->\textbackslash{}
)产生的,在这种情况下不应被替换。我认为解决办法是一步完成所有替换,但我不知道如何操作。也许可以尝试使用未记录的:
屈服
\\textbackslash{}foo\\textbackslash{}\\{{}bar\\}{}
与您发布的代码不同,如果您查看的话,re.Scanner.scan只通过字符串一次。一旦进行了一场比赛,下一场比赛将从最后一场比赛结束的地方开始
re.Scanner
的第一个参数是一个词典--2元组列表。每个2元组是一个正则表达式模式和一个动作。操作可以是字符串、可调用(函数)或None
(无操作)
这些模式都被编译成一个复合模式。因此,模式在词典中列出的顺序很重要。第一个匹配的模式获胜
如果进行了匹配,则如果操作是可调用的,则调用该操作;如果是字符串,则仅返回该操作。返回值收集在列表标记中
\\textbackslash{}foo\\textbackslash{}\\{{}bar\\}{}