在python中搜索和替换文本

时间:2011-05-28 18:38:55

标签: python regex

我对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 我不知道如何解决这个问题。我尝试分裂,但没有奏效。
谢谢!

4 个答案:

答案 0 :(得分:3)

我建议您参加python教程,也许是string部分。

之后,regexp教程。

答案 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)

尝试re.sub

regex = re.compile('a+')
x = re.sub(regex, 'd', 'baac')
print(x)

打印:

bdc

答案 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)'