python中的一个简单regexp

2024-04-25 22:42:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我的程序是一个简单的计算器,所以我需要解析用户键入的te表达式,以获得更友好的输入。我知道我可以用正则表达式,但我对这方面还不够熟悉。你知道吗

所以我需要像这样转换输入:

import re
input_user = "23.40*1200*(12.00-0.01)*MM(H2O)/(8.314 *func(2*x+273.15,x))"
re.some_stuff( ,input_user) # ????

在这方面:

"23.40*1200*(12.00-0.01)*MM('H2O')/(8.314 *func('2*x+273.15',x))"

只是在括号里加上这些简单的引号。我该怎么做?你知道吗

更新:

更清楚地说,我想在后面的每个字符序列“MM”(“and before the”)”后面加上简单的引号,在后面的每个字符序列“func”(“and before the”)后面加上简单的引号。你知道吗


Tags: andthe用户程序reinput序列字符
1条回答
网友
1楼 · 发布于 2024-04-25 22:42:31

这是regex可以工作的地方,但是它们可能会导致严重的问题,除非您考虑您的输入到底是什么样的。例如,MM(…)中的任何东西都可以包含自己的括号吗?func中的第一个表达式能否包含逗号?如果两个问题的答案都是“否”,那么以下方法可能有效:

 input_user2 = re.sub(r'MM\(([^\)]*)\)', r"MM('\1')", input_user)
 output = re.sub(r'func\(([^,]*),', r"func('\1',", input_user)

但是,如果这两个问题的答案都是肯定的,那么这将不起作用,即使没有这一点也可能会导致问题,具体取决于您希望接收的输入类型。基本上,第一个回复sub这里查找MM(('MM(')),后跟任意数量(包括0)的字符,这些字符不是右括号('([^]*)'),然后存储为一个组(由额外的括号引起),然后是右括号。它用第二个参数中的字符串替换该节,其中\1被模式中第一个也是唯一一个组替换。第二个回复sub类似地,查找任意数量的非逗号字符。你知道吗

如果这两个问题的答案都是肯定的,那么regexp就不适合解析,因为您的语言不是常规的。The answer to this question在讨论另一个应用程序时,可能会更深入地了解这个问题。你知道吗

相关问题 更多 >