我希望替换取决于找到的内容。即。我之后的一个例子可能是以下
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。
答案 0 :(得分:3)
也许这很简单,但你可以通过首先在multiply上应用regex,然后在add运算符上使用替换函数来构建一些简单的求值器:
(node*)0
这里,正则表达式尝试匹配“数字运算符号”(中间有可选空格)并在匹配时调用替换函数。
替换函数符合作用,转换为整数,执行相关操作,并返回要替换的字符串。
当然,这不是为处理带括号的表达式而设计的,而是永远不会,考虑第三方评估者,比如simpleeval(在pypi中搜索会得到几十个结果)
答案 1 :(得分:0)
我知道这不是您尝试这样做的方式,但您是否考虑过使用eval()功能?
>>> statement = input("Expression: ")
3 + 4 * (5 + 2)
>>> eval(statement)
31
这比使用RegEx更容易。
有些人在面对问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。 - 杰米·扎温斯基