我需要拆分由空格分隔的不同字符串,但我想忽略嵌套双引号中的空格或双引号的任意组合。这是一个例子:
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)
您尝试使用双引号,就像人们通常使用括号一样。您的上一个示例可以重写为
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)
它将一个字符串分成一对双引号之前的所有内容,双引号之间的所有内容以及之后的所有内容。然后它根据双引号之前和之后的空格完成分区。