为了账号安全,请及时绑定邮箱和手机立即绑定

使用否定集 [^] 和什么?否定同一行中的子字符串

使用否定集 [^] 和什么?否定同一行中的子字符串

温温酱 2021-07-01 18:01:55
我正在编写一个解析器,而不是将LaTeX数学转换为与 pythoneval()兼容的字符串。我得到了一个看起来像这样的字符串:\sqrt{4m/s} - \frac{3v+10.5v}{20a-8a} +1/2请注意仍然主要的LaTeX语法,以及一些任意的“单位”字母。然后我使用以下否定集来替换除否定集中的内容之外的所有内容。    mathstr = re.sub('[^0-9*()/+\-.Q]','',mathstr)我如何包含一个子字符串“sqrt”,以便它可以以类似的方式工作,最好是在相同的正则表达式中?现在我的工作是用 ' \sqrt'替换 ' ' Q,执行上面的代码行,然后将 ' Q'设置为 ' sqrt',我从上述语法到eval()语法的完整例程如下:    mathstr = mathstr.replace(" ","")    if pwrRe.search(mathstr):        mathstr = re.sub(pwrRe,'**',mathstr)    if MultiplyRe.search(mathstr):        mathstr = re.sub(MultiplyRe,'*',mathstr)    if DivideRe.search(mathstr) or sqrtRe.search(mathstr):        mathstr = re.sub('\\\\frac{','(',mathstr)        mathstr = re.sub('\\\\sqrt{','\\\\sqrt(',mathstr)           mathstr = re.sub('}{',')/(',mathstr)        mathstr = re.sub('}',')',mathstr)    mathstr = re.sub('[/*+\-^][a-zA-Z]','',mathstr)    mathstr = re.sub('\\\\sqrt','Q',mathstr)    mathstr = re.sub('[^0-9*()/+\-.Q]','',mathstr)    mathstr = re.sub(r'Q','sqrt',mathstr)这导致eval()语法'd:sqrt(4)-(3+10.5)/(20-8)+1/2但这是草率的,如果我可以在一行中“白名单”字符和子字符串,将所有其他出现的字符吹走,那么它在许多领域都会很有用。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号