如果我们按如下方式使用它:
re.sub("a\(\s*\d*\s*,\s*\d*\s*\)", "100", "a(440, 330)"
我们得到:
>> "100"
现在,我们在a()
内有a()
:
re.sub("a\(\s*\d*\s*,\s*\d*\s*\)", "100", "a(30, a(30,30))")
我们得到:
>> 'a(30, 100)'
但我想要这样的事情:
1. a(30, a(30,30)) # replace the nested 'a'
2. a(30, 100) # now work with the remainder
3. '100' # final string
抱歉我的英文。
答案 0 :(得分:7)
继续更换,直到没有任何东西可以替换:
while True:
output = re.sub("a\(\s*\d*\s*,\s*\d*\s*\)", "100", input)
if output == input:
break
input = output
答案 1 :(得分:3)
你可以在没有while循环的情况下使用'+'选项来表示多重匹配。
re.sub("[a\(\s*\d*\s*,\s*\d*\s*\)]+", "100", "a(30, a(30,30))")
我也倾向于忘记一段时间没有立即打击你的正则表达式选项。列表/打印&把它放在你面前。随着时间的推移,你最终会注意到/记住匹配案例的所有可能选项