如何按空格分割但在多个双引号中忽略它?

时间:2013-11-26 04:54:14

标签: python regex python-3.x

我需要拆分由空格分隔的不同字符串,但我想忽略嵌套双引号中的空格或双引号的任意组合。这是一个例子:

c "a " bbh "." d1 

输出应该是这样的:

c
"a " bbh "." 
 d1

或者像这样的双引号的其他组合:

c "a "bbh"" d1 

输出应该是这样的:

c
"a "bbh"" 
d1

有没有办法从拆分中排除双引号的任何组合?

*编辑*

又一个例子:

c "a " bbh "." d1 kj "mn"

输出应该是这样的:

c
"a " bbh "."
d1
kj
"mn"

修改

感谢您的帮助。实际上我根据我的数据问了这个问题。是什么让我的问题定义不明确的是数据格式错误!

2 个答案:

答案 0 :(得分:3)

您尝试使用双引号,就像人们通常使用括号一样。您的上一个示例可以重写为

c (a ( bbh ).) d1 kj (mn)

事实上,它需要以可解决的方式重写。在语义上无法知道您希望将您的示例翻译成上面的字符串或

c (a ( bbh (.) d1 kj )mn)

c (a ) bbh (.) d1 kj (mn)

并且字符串中的引号越多,解释的方式就越多。实际上,最后两个是更明显的解释,因为后者是引用通常在编程语言中工作的方式,前者可以被认为是一种贪婪的正则表达式(如bcorso的解决方案)。

所以你想要的是不可能的,但是如果你稍微改变了一下,就可以通过递归解决方案(但不是正则表达式,因为你需要检查平衡的括号)。

答案 1 :(得分:0)

你可以试试正则表达式

>>> strs = re.split(r'(".+")+', 'c "a " bbh "." d1 ')

>>> strs = strs[0].split(" ") + strs[1] + strs[2].split(" ")

>>> strs = filter(None, strs)

它将一个字符串分成一对双引号之前的所有内容,双引号之间的所有内容以及之后的所有内容。然后它根据双引号之前和之后的空格完成分区。