lim*_*to0 5 python regex split delimiter
我如何转换"1,,2'3,4'"成列表?逗号分隔各个项目,除非它们在引号内.在这种情况下,逗号将包含在项目中.
这是理想的结果:['1', '', '2', '3,4'].我在另一个线程上发现忽略引号的一个正则表达式如下:
re.compile(r'''((?:[^,"']|"[^"]*"|'[^']*')+)''')
Run Code Online (Sandbox Code Playgroud)
但这给了我这个输出:
['', '1', ',,', "2'3,4'", '']
Run Code Online (Sandbox Code Playgroud)
我无法理解,这些额外的空字符串来自哪里,为什么两个逗号甚至都被打印出来,更不用说在一起了.
我自己尝试制作这个正则表达式:
re.compile(r'''(, | "[^"]*" | '[^']*')''')
Run Code Online (Sandbox Code Playgroud)
最终没有检测到任何东西,只是返回原来的清单.
我不明白为什么,它至少不应该检测到逗号?如果我?在逗号后添加一个,则会出现同样的问题.
Sea*_*ira 10
您可能最好不要使用正则表达式,csv因为您正在处理的是CSV字符串:
from cStringIO import StringIO
from csv import reader
file_like_object = StringIO("1,,2,'3,4'")
csv_reader = reader(file_like_object, quotechar="'")
for row in csv_reader:
print row
Run Code Online (Sandbox Code Playgroud)
这导致以下输出:
['1', '', '2', '3,4']
Run Code Online (Sandbox Code Playgroud)
pyparsing包含逗号分隔列表的预定义表达式:
>>> from pyparsing import commaSeparatedList
>>> s = "1,,2'3,4'"
>>> print commaSeparatedList.parseString(s).asList()
['1', '', "2'3", "4'"]
Run Code Online (Sandbox Code Playgroud)
嗯,看起来你的数据中有一个拼写错误,2之后缺少逗号:
>>> s = "1,,2,'3,4'"
>>> print commaSeparatedList.parseString(s).asList()
['1', '', '2', "'3,4'"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2242 次 |
| 最近记录: |