匹配“方法调用”字符串中的所有内容以及可能嵌套的括号

时间:2018-03-16 14:23:16

标签: python regex

我想编写一个python正则表达式来替换字符串FARM_FINGERPRINT()以及该方法调用中的任何内容,并使用字符串'0'。例如,对于字符串:

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

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

我也对非正则表达式解决方案持开放态度。

1 个答案:

答案 0 :(得分:1)

标识要匹配的字符串的开头以及该匹配中的第一个括号(从而将p_count初始化为1)。逐个字符串地逐字符号,并为每个左括号1添加p_count(,并为每个闭括号1p_count减去) }。当所有左括号都已关闭时退出循环。

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()