我对python编程很有用
我不知道如何解决这个任务:
for line in f: br
m = re.search("f(\S+\s+,\s+\S+)",
"56 - f(32 , 6*3) + 62 * ( 54 - 3 ) + f(5 , 9+y)")
print m.group()
我必须转换所有f(x , y) to x*y
我不知道如何解决这个问题。我尝试分裂,但没有奏效。
谢谢!
答案 0 :(得分:3)
答案 1 :(得分:1)
正则表达式可能是一个复杂的野兽,我建议阅读它们。对于这种特殊情况,re.sub应该可以解决问题。
以下是使用您提供的输入我想出的一些示例。
import re
inp = "56 - f(32 , 6*3) + 62 * ( 54 - 3 ) + f(5 , 9+y)"
# Matches on characters, arithmetic operations, and digits (hopefully)
pattern = r"f\(\s*([a-z\d\-\+\*/]+)\s*,\s*([a-z\d\-\+\*/]+)\s*\)"
print re.sub(pattern, r"\1 * \2", inp)
这应该产生:
56 - 32 * 6*3 + 62 * ( 54 - 3 ) + 5 * 9+y
在正则表达式方面我不是专家,但希望上面的内容能让你开始。我怀疑上面的正则表达式会捕获所有事件,为此我建议你问一个有更好的正则表达式的人。仅以此为例。
答案 2 :(得分:0)
答案 3 :(得分:0)
喜欢这个!?
>>> inp = "56 - f(32 , 6*3) + 62 * ( 54 - 3 ) + f(5 , 9+y)"
>>> import re
>>> re.sub(r'f\((\S+)\s*,\s*(\S+)\)',r'\1*\2',inp)
'56 - 32*6*3 + 62 * ( 54 - 3 ) + 5*9+y'
将括号放在括号中可能有用吗?然后你可以使用以下正则表达式:
>>> re.sub(r'f\((\S+\s*),(\s*\S+)\)',r'(\1*\2)',inp)
'56 - (32 * 6*3) + 62 * ( 54 - 3 ) + (5 * 9+y)'