提问者:小点点

匹配"方法调用"字符串中可能嵌套括号的所有内容[重复]


我想编写一个python正则表达式,用字符串“0”替换字符串FARM\u FINGERPRINT(),以及该方法调用中的任何内容。例如,对于字符串:

s = 'FARM_FINGERPRINT(stuff(more stuff()), even more stuff), another_thing()'

正则表达式应该用'0,another_thing()'替换它。

我也愿意接受非正则表达式的解决方案。


共1个答案

匿名用户

确定要匹配的字符串的开头和匹配中的第一个括号(因此将p_count初始化为1)。逐个字符迭代字符串,为每个打开的括号添加1p_count(为每个关闭的括号p_count减去1。当所有打开的括号都已关闭时退出循环。

s = 'FARM_FINGERPRINT(stuff(more stuff()), even more stuff), another_thing()'

start = 'FARM_FINGERPRINT('

p_count = 1
for idx, i in enumerate(s.split('FARM_FINGERPRINT(')[-1]):
    if i=='(': p_count+=1
    elif i==')': p_count-=1
    elif p_count==0: stop = idx; break

string_to_replace = s[:len(start)+stop]

s = s.replace(string_to_replace, '0')

print(s)

输出:

0, another_thing()