Python - 如何在拆分字符串时忽略双引号中的空格? [复制]

Posted

技术标签:

【中文标题】Python - 如何在拆分字符串时忽略双引号中的空格? [复制]【英文标题】:Python - How to ignore white spaces in double quotes while splitting a string? [duplicate] 【发布时间】:2014-03-05 04:01:41 【问题描述】:

我的数据如下

string = ' streptococcus 7120 "File  being  analysed" rd873 '

我尝试使用n=string.split() 拆分行,结果如下:

[streptococcus,7120,File,being,analysed,rd873]

我想拆分字符串,忽略“”中的空格

# output expected :

[streptococcus,7120,File being analysed,rd873]

【问题讨论】:

您是否可能有嵌套引号(例如"File name "foo" being analyzed")? 另见this。 【参考方案1】:

re.findall 与合适的正则表达式一起使用。我不确定您的错误案例是什么样的(如果引号是奇数怎么办?),但是:

filter(None, it.chain(*re.findall(r'"([^"]*?)"|(\S+)', ' streptococcus 7120 "File  being  analysed" rd873 "hello!" hi')))
> ['streptococcus',
   '7120',
   'File  being  analysed',
   'rd873',
   'hello!',
   'hi']

看起来不错。

【讨论】:

您是否在 OP 的示例字符串上对此进行了测试?它不会做你想让它做的事情。 (好吧,现在它在你编辑之后就可以了。)【参考方案2】:

你想要shlex.split,它会用引号给你想要的行为。

import shlex

string = ' streptococcus 7120 "File  being  analysed" rd873 '
items  = shlex.split(string)

这不会去除嵌入在字符串中的额外空格,但您可以通过列表推导来做到这一点:

items  = [" ".join(x.split()) for x in shlex.split(string)]

看,妈妈,没有正则表达式!

【讨论】:

非常感谢 除了使用 shlex 还有其他方法吗 嗯,有很多方法可以做任何事情...... Shlex 也抓取单引号字符串,我不确定这是否是有意的。

以上是关于Python - 如何在拆分字符串时忽略双引号中的空格? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在逗号上拆分字符串但忽略双引号内的逗号?

使用 Python 将 Google Cloud Storage 中的数据加载到 BigQuery 时,如何强制忽略双引号?

使用逗号拆分字符串,但忽略双引号内的逗号 - javascript

Java:拆分逗号分隔的字符串但忽略引号中的逗号

在python中拆分字符串

如何拆分文本以匹配双引号加上尾随文本到点?