Python 重新拆分需要在开始和结束处用特定符号分隔

Python 重新拆分需要在开始和结束处用特定符号分隔,python,regex,Python,Regex,我试图获得一个正则表达式,该表达式用逗号表示数据集,但这些组必须是一个形状,如图所示: 输入 输出 ["avg:system.cpu.user{*} by {host}*avg:system.cpu.user{*} by {host}", "avg:system.cpu.user{*} by {host}*avg:system.cpu.user{*} by {host}", "top(avg:system.load.1{*}, 5, 'mean'

我试图获得一个正则表达式,该表达式用逗号表示数据集,但这些组必须是一个形状,如图所示:

输入

输出

["avg:system.cpu.user{*} by {host}*avg:system.cpu.user{*} by {host}",
"avg:system.cpu.user{*} by {host}*avg:system.cpu.user{*} by {host}",
"top(avg:system.load.1{*}, 5, 'mean', 'desc')",
"top(avg:system.load.1{*}, 5, 'mean', 'desc')"]
我实际上使用:

re.split('([^()]*},|[^()]*\),)',input)
但我得到:

['', 'avg:system.cpu.user{*} by {host}*avg:system.cpu.user{*} by {host},avg:system.cpu.user{*} by {host}*avg:system.cpu.user{*} by {host},', 'top(', 'avg:system.load.1{*},', '', "5,'mean','desc'),", 'top(', 'avg:system.load.1{*},', " 5, 'mean', 'desc')"]

尝试使用另一种模式,该模式查找对数字、引号或空格具有负前瞻性的逗号

re.split(r",(?![\s\d'])", input)
测试

import re
inp = "avg:system.cpu.user{*} by {host}*avg:system.cpu.user{*} by {host},avg:system.cpu.user{*} by {host}*avg:system.cpu.user{*} by {host},top(avg:system.load.1{*},5,'mean','desc'),top(avg:system.load.1{*}, 5, 'mean', 'desc')"
print(*re.split(r",(?![\s\d'])", inp), sep='\n')
输出

avg:system.cpu.user{*} by {host}*avg:system.cpu.user{*} by {host}
avg:system.cpu.user{*} by {host}*avg:system.cpu.user{*} by {host}
top(avg:system.load.1{*},5,'mean','desc')
top(avg:system.load.1{*}, 5, 'mean', 'desc')

+1个非常好的答案,这解决了我的问题,我尝试使用特定的符号。现在我明白了用模式我可以做到。。。我需要进一步调查它是如何工作的。谢谢you@DavidMedina尝试我一直在尝试,现在我知道它是如何工作的,很好的页面,我将使用它来测试下一个正则表达式,再次感谢您使用
input
作为变量名,它在python中是一个保留字
avg:system.cpu.user{*} by {host}*avg:system.cpu.user{*} by {host}
avg:system.cpu.user{*} by {host}*avg:system.cpu.user{*} by {host}
top(avg:system.load.1{*},5,'mean','desc')
top(avg:system.load.1{*}, 5, 'mean', 'desc')