我想从文件中提取所有的乳胶表达式,即$
和$
之间不在\$
和\$
之间的字符串
考虑以下内容:
import re
with open("abstracts.txt","r",encoding="utf-8") as f:
l = f.read()
with open("latex.txt","w",encoding="utf-8") as f:
for a in re.findall(r"[^\\]\$.*?[^\\]\$",l,re.S):
f.write(a+"\n")
这可以按照我的需要运作,但它包括美元符号。但是当我将(*)改为
时 for a in re.findall(r"[^\\]\$(.*?)[^\\]\$",l,re.S): #(*)
它没有做我想要的。例如,字符串$\overline{\tilde \ch_0}$
会转换为\overline{\tilde \ch_0
。
知道我做错了什么吗?
答案 0 :(得分:2)
你的正则表达式与美元符号前面的字符匹配。我建议使用负面的lookbehind:
for a in re.findall(r"(?<!\\)\$(.*?)(?<!\\)\$",l,re.S):