我想用re.sub来解决这个问题:
string = '\\(2 \\, e^{\\left(2 \\, x\\right)} \\sin\\left(2 \\, x\\right) + 2 \\, e^{\\left(2 \\, x\\right)} \\cos\\left(2 \\, x\\right)\\)'
进入这个:
'\\(2 \\, e^{2 \\, x} \\sin\\left(2 \\, x\\right) + 2 \\, e^{2 \\, x} \\cos\\left(2 \\, x\\right)\\)'
这是我最好的尝试,但它不起作用:
re.sub(r'(?P<left-edge>e\^{\\left\()(?P<input>.*)(?P<right-edge>\\right\)})','e^{\g<input>}',string)
Note that <input> needs to handle an arbitrary expression, while <left-edge> and <right-edge> are fixed character strings.
我认为它与所涉及的特殊角色有关,但有几十次尝试表明它超出了我的专业知识。
答案 0 :(得分:2)
必须转义正则表达式中的反斜杠。您使用了r''
,因此它们不必作为Python字符串中的字符进行转义,但这还不足以将它们解释为正则表达式中的文字\
字符。使用双反斜杠:
re.sub(r'(?Pe\^{\\left()(?P.*)(?P\\right)})','e\^{\\g}',string)
如果不是r''
,它们必须被转义两次,即四倍,以便同时满足Python解释器和regexp引擎:
re.sub('(?Pe\\^{\\\\left()(?P.*)(?P\\\\right)})','e\\^{\\\\g}',string)
(另外,你也忘了逃避^
个问候。我在两个例子中都纠正了这一点。)
答案 1 :(得分:0)
.*
匹配太多:
print(re.sub(r'e\^{\\left\((.*?)\\right\)}', r'e^{\1}', s))
\(2 \, e^{2 \, x} \sin\left(2 \, x\right) + 2 \, e^{2 \, x} \cos\left(2 \, x\right)\)