Python 分割字符串,在引号内除外,在忽略空格时

2024-05-16 21:42:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我找到了一些解决办法,但是我得到的结果与我期望的不符。在

我想取一个字符串,并将其拆分为逗号,除非逗号包含在双引号中。我想忽略空白。我可以忍受在这个过程中失去双引号,但这不是必要的。在

csv是最好的方法吗?正则表达式解决方案会更好吗?在

#!/usr/local/bin/python2.7

import csv

s = 'abc,def, ghi, "jkl, mno, pqr","stu"'

result = csv.reader(s, delimiter=',', quotechar='"')

for r in result: 
    print r

# Should display:
# abc
# def
# ghi
# jkl, mno, pqr
# stu
#
# But I get:
# ['a']
# ['b']
# ['c']
# ['', '']
# ['d']
# ['e']
# ['f']
# ['', '']
# [' ']
# ['g']
# ['h']
# ['i']
# ['', '']
# [' ']
# ['jkl, mno, pqr']
# ['', '']
# ['stu']

print r[1]  # Should be "def" but I get and "list index out of range" error.

Tags: csvgetdefjklresultabcprint逗号
2条回答

可以使用正则表达式

".+?"|[\w-]+

这将匹配双引号,后跟任何字符,直到找到下一个双引号-或者,它将匹配单词字符(没有逗号或引号)。在

https://regex101.com/r/IThYf7/1

^{pr2}$

如果您想去掉引用部分周围的",那么使用regex模块(这样\K是可用的)的最佳方法是:

(?:^"?|, ?"?)\K(?:(?<=").+?(?=")|[\w-]+)

https://regex101.com/r/IThYf7/3

除了使用csv之外,您还可以有另一种更好的方法,它由更新的regex模块(即pip install regex)支持:

"[^"]*"(*SKIP)(*FAIL)|,\s*


内容如下: ^{pr2}$


Python
import regex as re

rx = re.compile(r'"[^"]*"(*SKIP)(*FAIL)|,\s*')
string = 'abc,def, ghi, "jkl, mno, pqr","stu"'

parts = rx.split(string)
print(parts)

这就产生了

['abc', 'def', 'ghi', '"jkl, mno, pqr"', '"stu"']

a demo on regex101.com。在

相关问题 更多 >