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

2024-10-03 04:27:25 发布

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

我需要拆分用空格分隔的不同字符串,但我希望忽略嵌套双引号或双引号任意组合的空格。下面是一个例子:

c "a " bbh "." d1 

输出应如下所示:

^{pr2}$

或者像这样的双引号的另一种组合:

c "a "bbh"" d1 

输出应如下所示:

c
"a "bbh"" 
d1

有没有什么方法可以将双引号的任何组合从拆分中排除?在

*编辑*

还有一个例子:

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

输出应如下所示:

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

编辑

谢谢你们的帮助。实际上,我是根据我掌握的数据提出这个问题的。使我的问题定义不清的是数据格式错误!在


Tags: 数据方法字符串编辑定义错误例子d1
2条回答

你试图像人们通常使用括号那样使用双引号。最后一个例子可以改写为

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

事实上,它需要这样重写才能完全解决。无法从语义上知道您希望将示例翻译为上面的字符串或

^{pr2}$

或者

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

字符串中的引号越多,解释它的方式就越多。事实上,后两种解释更为明显,因为后者是引号在编程语言中的工作方式,而前者可以被视为贪婪的regex(就像bcorso的解决方案)。在

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

你可以试试regex

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

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

>>> strs = filter(None, strs)

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

相关问题 更多 >