如何在逗号上将字符串拆分为数组,但忽略括号中的逗号

时间:2018-07-20 00:53:26

标签: python arrays regex

我有一个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(",")

如何实现?

4 个答案:

答案 0 :(得分:2)

您可以将,(?![^\(]*[\)])用于列表理解:

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)']

答案 1 :(得分:1)

使用正则表达式基于多个定界符进行分割

IntRange

之所以有用,是因为您的字符串的括号stringToSplit = '''a VARCHAR(20), b FLOAT, c FLOAT, d NUMBER(38,0), e NUMBER(38,0)''' import re re.split(', |,\n', stringToSplit) 中的逗号后没有空格或换行符。

答案 2 :(得分:0)

如果您对数据了解更多,可以通过执行以下操作轻松避免所有奇怪的解析:

a.replace(", ", "@").replace(",\n", "@").split("@")

将分隔符替换为其他字符,然后在这些字符上进行拆分。 假设您在分隔符的逗号后面有一个空格。不是最优雅的,但是如果您处于绑定状态,则可以处理大多数情况。

答案 3 :(得分:0)

使用列表推导和字符串方法:

给出

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)']