不要用Python的字符串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
我建议你使用 re
来查找模式 "[^"]*",然后只对剩下的部分使用字符串的分割功能。你可以实现一个递归函数,来处理所有相关的字符串部分。
4
@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']
36
你不能通过 str.split()
来实现这个功能。如果你能接受它处理起来比较复杂的方式(比如会忽略前面有反斜杠的双引号),那么 shlex.split()
可能正是你需要的:
>>> shlex.split(myStr)
['A', 'B', 'C', 'DE', 'FE', 'GH I JK L', '', '', 'O P Q', 'R']