" 别使用Python字符串分割()分割双引号括起来的词吗?

2024-05-18 07:33:17 发布

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

当使用Python string函数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']

有什么非regex的建议吗?


Tags: 函数内容技巧string方式degh单词
3条回答

@Rob:如果regexp解决方案这么简单,为什么没有regex?

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

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

使用str.split()将无法获得此行为。如果您能够接受它所做的相当复杂的解析(比如忽略前面有反斜杠的双引号),那么^{}可能就是您要寻找的:

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

相关问题 更多 >