[英]how to split string into array on commas but ignore commas in parentheses
我有一个包含3行的字符串:
a VARCHAR(20),
b FLOAT, c FLOAT,
d NUMBER(38,0), e NUMBER(38,0)
需要基于逗号分隔符将字符串拆分为数组,但忽略括号中的逗号。
最终输出是包含5个元素的数组:
s_arr = ['a VARCHAR(20)', 'b FLOAT', 'c FLOAT', 'd NUMBER(38,0)', 'e NUMBER(38,0)']
到目前为止我有s_arr = s.split(",")
怎么实现呢?
您可以将,(?![^\\(]*[\\)])
与列表理解一起使用:
s = '''
a VARCHAR(20),
b FLOAT, c FLOAT,
d NUMBER(38,0), e NUMBER(38,0)
'''
[i.strip() for i in re.split(r',(?![^\(]*[\)])', s)]
# ['a VARCHAR(20)', 'b FLOAT', 'c FLOAT', 'd NUMBER(38,0)', 'e NUMBER(38,0)']
stringToSplit = '''a VARCHAR(20),
b FLOAT, c FLOAT,
d NUMBER(38,0), e NUMBER(38,0)'''
import re
re.split(', |,\n', stringToSplit)
这是有效的,因为您的字符串在括号中的逗号后面没有任何空格或换行符(1,2)
。
如果您对数据有更多了解,可以通过以下方式轻松避免所有奇怪的解析:
a.replace(", ", "@").replace(",\n", "@").split("@")
用不同的字符替换分隔符并将其拆分。 假设您在分隔符逗号后面有空格。 不是最优雅的,但如果你处在一个绑定中,它将处理大多数情况。
使用列表推导和字符串方法:
特定
s = """\
a VARCHAR(20),
b FLOAT, c FLOAT,
d NUMBER(38,0), e NUMBER(38,0)
"""
码
[z.strip() for y in [x.split(", ") for x in s.split(",\n")] for z in y]
# ['a VARCHAR(20)', 'b FLOAT', 'c FLOAT', 'd NUMBER(38,0)', 'e NUMBER(38,0)']
另外
[z.strip(",") for y in [x.split(", ") for x in s.splitlines()] for z in y]
# ['a VARCHAR(20)', 'b FLOAT', 'c FLOAT', 'd NUMBER(38,0)', 'e NUMBER(38,0)']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.