不要用Python字符串split()拆分双引号的单词?

时间:2011-10-24 20:47:51

标签: python string split

当使用Python字符串函数split()时,是否有人有一个很好的技巧来处理被双引号包围的项目作为非分裂字?

说我想只在白色空间拆分而且我有这个:

>>> myStr = 'A B\t"C" DE "FE"\t\t"GH I JK L" "" ""\t"O P   Q" R'
>>> myStr.split()
['A', 'B', '"C"', 'DE', '"FE"', '"GH', 'I', 'JK', 'L"', '""', '""', '"O', 'P', 'Q"', 'R']

我想将双引号内的任何内容视为一个单词,即使嵌入了空格,也希望最终得到以下内容:

['A', 'B', 'C', 'DE', 'FE', 'GH I JK L', '', '', 'O P   Q', 'R']

或者至少这个,然后我将剥离双引号:

['A', 'B', '"C"', 'DE', '"FE"', '"GH I JK L"', '""', '""', '"O P   Q"', 'R']

任何非正则表达式的建议?

3 个答案:

答案 0 :(得分:34)

str.split()您将无法获得此行为。如果您可以使用相当复杂的解析(例如忽略前面带有反斜杠的双引号),shlex.split()可能就是您要找的内容:

>>> shlex.split(myStr)
['A', 'B', 'C', 'DE', 'FE', 'GH I JK L', '', '', 'O P   Q', 'R']

答案 1 :(得分:2)

@Rob:为什么没有正则表达式,如果正则表达式解决方案如此简单?

my_str = 'A B\t"C" DE "FE"\t\t"GH I JK L" "" ""\t"O P   Q" R'
print re.findall(r'(\w+|".*?")', my_str)
['A', 'B', '"C"', 'DE', '"FE"', '"GH I JK L"', '""', '""', '"O P   Q"', 'R']

答案 2 :(得分:0)

我建议您使用re搜索模式“[^”] *“,并仅对其余部分应用string.split。您可以实现一个处理所有相关字符串部分的递归函数。