当有一串字符,例如to_num((...),(...)) ...需要匹配到完整的to_num((...),(...))时,使用普通的正则匹配
import re
str='to_num((),()) .....\n ((),)'
pattern=re.compile(r'to_num\(.*?(?=\))',flags=re.IGNORECASE)
for i in re.findall(pattern,str):
print(i)
得到的结果为to_num((
显然不是我们想要的to_num((),())
因此,我们可以定义一个函数find_bracket(str),str为目标字符串,函数返回完整的括号对
# 完整的括号对
def find_bracket(str):
lt=rt=0
start=finish=False
x=''
for i in str:
start=True
if i=='(':
lt=lt+1
if i==')':
rt=rt+1
if lt==rt!=0:
finish=True
if start and not finish:
x=x+i
if finish:
x=x+')'
break
return x
这时我们更改一下正则匹配规则
import re
str='to_num((),()) .....\n ((),)'
pattern=re.compile(r'to_num\(.*?(?=\n)',flags=re.IGNORECASE)
for i in re.findall(pattern,str):
print(find_bracket(i))
此时控制台输出为 to_num((),())
这样就完成了对括号对的完整匹配