2013-11-26 35 views
-2

我需要拆分由空格分隔的不同字符串,但我想忽略嵌套双引号或双引号组合中的空格。这里有一个例子:如何按空格拆分,但在多个双引号中忽略它?

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" 

编辑

谢谢您帮助家伙。其实我根据我的数据问了这个问题。什么让我的问题不明确是数据的错误格式!

+0

当你说“双引号的任意组合”时,你是否包含奇数的双引号?你想排除(从拆分)字符串中第一个和最后一个双引号之间的所有文本吗? –

+3

你怎么知道'“a”bbh“”'是一个引用的字符串,还是字符串'“a”','bbh'(不含引号)和'“”'? – Blckknght

+0

@PeterAlfvin实际上不是,双引号的数目是偶数,但我们不能在字符串中的第一个和最后一个双引号之间说出所有文本,因为字符串可能是这样的:c“a”bbh“。” d1 kj“nh” – user3003428

回答

0

你可以尝试后,正则表达式

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

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

>>> strs = filter(None, strs) 

它一对双引号,双引号之间的一切之前分割字符串成的一切,一切。然后它根据双引号之前和之后的空格完成分区。

+0

谢谢,但它包含分隔符(空格)的标记,也没有用到这样的例子:'c“a”bbh“。” d1 kj“mn”' – user3003428

+1

这是因为该示例不明确。删除多余空间也很容易,但首先重申您的问题,使其有意义。 – bcorso

3

您试图使用双引号的方式,人们通常会使用括号。你的最后一个例子可以改写为

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

事实上,它需要重写那种方式才能解决。有没有办法语义知道,你希望你的例子转换为字符串上方或

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

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

和字符串中的更多的报价,将更多的方式可以把它理解。事实上,最后两个是更明显的解释,因为后者是引语通常在编程语言中的工作方式,而前者可以被认为是贪婪的正则表达式(比如bcorso的解决方案)。所以你想要的是不可能的,但是如果你只是稍微改变了它,那么通过递归解决方案(但不是正则表达式,因为你需要检查平衡的圆括号)是可能的。

相关问题