使用python re在转义字符串中拆分

时间:2017-06-27 11:41:40

标签: python regex string split

我需要用','分隔符分割指定的字符串。但不会在转义字符串中拆分(由双引号转义)。 如何正确地使用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*'

0 个答案:

没有答案