我需要用','分隔符分割指定的字符串。但不会在转义字符串中拆分(由双引号转义)。 如何正确地使用re拆分字符串(仅限re,而不是csv解析器)?
pattern = r',(?!(?:[^"]|(?<!,)"(?!,))*"(?:,|$))'
string = 'ABC-AAAA,DDD_EEE_FFF,,BK,"-type=foo -type=fullvm -name=A_B_C -domain.dmn="CLSTR=SN-C0001;HOST=myhost.abc1.com,myhost.abc2.com,myhost.abc5.com,myhost.abc3.com,myhost.abc4.com;-MM=*A*B,*_M*,*T*,*3,*3,*_l*,*3*,*_M*,*_l*,*2,*C*,*4,*5*,*4,*7,*T*,*7*,*T,*e*,*t*,*0,*_L*,*8," -MODE=I",,5,2015-04-12,04:00:00,1,HOURS,,,"Sun,Mon,Tue,Wed,Thu,Fri,Sat",,2015-04-12 16:29:13.000000,TSMVE_DEV,'
import re
re.split(pattern, string)
我得到结果:
['ABC-AAAA', 'DDD_EEE_FFF', '', 'BK', '"-type=foo -type=fullvm -name=A_B_C -domain.dmn="CLSTR=SN-C0001;HOST=myhost.abc1.com', 'myhost.abc2.com', 'myhost.abc5.com', 'myhost.abc3.com', 'myhost.abc4.com;-MM=*A*B', '*_M*', '*T*', '*3', '*3', '*_l*', '*3*', '*_M*', '*_l*', '*2', '*C*', '*4', '*5*', '*4', '*7', '*T*', '*7*', '*T', '*e*', '*t*', '*0', '*_L*', '*8', ' -MODE=I', '', '5', '2015-04-12', '04:00:00', '1', 'HOURS', '', '', 'Sun,Mon,Tue,Wed,Thu,Fri,Sat', '', '2015-04-12 16:29:13.000000', 'TSMVE_DEV', '']
但我需要:
['ABC-AAAA', 'DDD_EEE_FFF', '', 'BK',
'"-type=foo -type=fullvm -name=A_B_C -domain.dmn="CLSTR=SN-C0001;HOST=myhost.abc1.com,myhost.abc2.com,myhost.abc5.com,myhost.abc3.com,myhost.abc4.com;-MM=*A*B',*_M*,*T*, '*3', '*3', '*_l*', '*3*',*_M*,*_l*,*2,*C*,*4,*5*,*4,*7,*T*,*7*,*T,*e*,*t*,*0,*_L*,*8, -MODE=I', '', '5', '2015-04-12', '04:00:00', '1', 'HOURS', '', '', 'Sun,Mon,Tue,Wed,Thu,Fri,Sat', '', '2015-04-12 16:29:13.000000', 'TSMVE_DEV', '']
不应拆分元素(转义):
'"-type=foo -type=fullvm -name=A_B_C -domain.dmn="CLSTR=SN-C0001;HOST=myhost.abc1.com,myhost.abc2.com,myhost.abc5.com,myhost.abc3.com,myhost.abc4.com;-MM=*A*B',*_M*,*T*, '*3', '*3', '*_l*'