操纵子串被发现替换

时间:2017-09-10 22:23:43

标签: python regex replace

我希望替换取决于找到的内容。即。我之后的一个例子可能是以下

def f(x):
    return str(int(x) + 1)

print(re.sub(r"(\d)", f(r"\1"), "123"))

#print 234

然而,当然,这并没有实际发挥作用。有没有办法做我想做的事情,而不必跟踪找到的字符串的位置/长度,然后在下一行替换它?即。我正在寻找一种方法来一次性完成这项工作。

请注意,我工作的实际示例并非如此简单。我正在创建一个解释数学计算字符串输入的函数。

EG。 " 2 + 4 * 6/3"

这个想法是为了取代" 4 * 6" 24岁,然后" 24/3" 8,最后" 2 + 8" 10.它将搜索适当的对并使用正则表达式跟随BIDMAS。

2 个答案:

答案 0 :(得分:3)

也许这很简单,但你可以通过首先在multiply上应用regex,然后在add运算符上使用替换函数来构建一些简单的求值器:

(node*)0

这里,正则表达式尝试匹配“数字运算符号”(中间有可选空格)并在匹配时调用替换函数。

替换函数符合作用,转换为整数,执行相关操作,并返回要替换的字符串。

当然,这不是为处理带括号的表达式而设计的,而是永远不会,考虑第三方评估者,比如simpleeval(在pypi中搜索会得到几十个结果)

答案 1 :(得分:0)

我知道这不是您尝试这样做的方式,但您是否考虑过使用eval()功能?

>>> statement = input("Expression: ")
3 + 4 * (5 + 2)
>>> eval(statement)
31

这比使用RegEx更容易。

  

有些人在面对问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。 - 杰米·扎温斯基