如何用逗号和空格分隔文本,而不是用数字分隔文本?

j91ykkif  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(343)

这个问题在这里已经有答案了

如何用括号外的逗号分割字符串(10个答案)
10个月前关门了。
嗨,我正在尝试用逗号分割ddl(在python3中),但问题是像'numeric(1,1)'或'decimal(2,4)'甚至'identity(1,2)'这样的数据类型给我带来了困难。
这是输入:

['x int not null, y decimal(2, 4) null, z numeric(7, 3), m bigint identity(1,1), d date]

这就是我想要的输出:

['x int not null','y decimal(2, 4) null','z numeric(7, 3)','m bigint identity(1,1)','d date']

然后我把它按空格分开,就可以编写代码了。
如果我使用 list.split(',') 它也被小数点逗号和标识分开。。
编辑:逗号问题解决后,我有不同的问题,我有以下列表:['x int not null','y decimal(2,4)null','z numeric(7,3)','m bigint identity(1,1)','d date']
我想得到mo for循环中每个迭代的输出:['x','int','not','null']['y','decimal(2,4)','null']等等。。。
当我把它按空格分开时,我得到:['x','int','not','null']['y','decimal(2','4','null']
我之所以这样做是因为我想在拆分[1]后处理列表\u,这是数据类型,但我想将所有数字(2,4)捕获为一个单元格,而不是“decimal(2)和“4)”
如何用不跟数字的空格分割?

ktecyv1j

ktecyv1j1#

我将使用regex来实现这个目的,我认为这样的东西应该可以工作:

import re
my_list = ['x int not null, y decimal(2, 4) null, z numeric(7, 3), m bigint identity(1,1), d date']
result = re.split(r',\s*(?![^()]*\))', my_list[0])

# result => ['x int not null', 'y decimal(2, 4) null', 'z numeric(7, 3)', 'm bigint identity(1,1)', 'd date']

它将使用“负展望”来匹配所有 , 不在括号中的字符。
一旦你得到了你的结果,循环通过它们并以任何你需要的方式处理它们:

for item in result:
    # split items more if needed:
    res = re.split(r' \s*(?![^()]*\))', item)
    print(res)
7gcisfzg

7gcisfzg2#

用逗号和空格分开,不跟数字和空格 ) :

>>> i = ['x int not null, y decimal(2, 4) null, z numeric(7, 3), m bigint identity(1,1), d date']
>>> o = re.split(r', (?![0-9]\))',''.join(i))
['x int not null', 'y decimal(2, 4) null', 'z numeric(7, 3)', 'm bigint identity(1,1)', 'd date']

相关问题