如何在拆分字符串python时忽略引号

时间:2013-09-29 11:59:43

标签: python

我想拆分下面提到的字符串:

  lin=' <abc<hd <> "abc\"d\" ef" '

 [<abc<hd <>,  "abc\"d\" ef"]

但是我的问题是当我使用re.findall(r'"(.*?)"', lin, 0)拆分字符串时。我得到了

['abc', 'ef'] 

有人可以指导我如何在Python中拆分字符串吗?

4 个答案:

答案 0 :(得分:4)

以下是使用正则表达式的解决方案。

import re
line = ' <abc<hd <> "abc\"d\" ef" ' 

match = list(re.findall(r'(<[^>]+>)\s+("(?:\"|[^"])+")', line)[0])

print(match)
#['<abc<hd <>', '"abc"d" ef"']

另一种方法。

print(re.split(r'\s+(?=")', line.strip())) #split on white space only if followed by a quote.
#['<abc<hd <>', '"abc"d" ef"']     

答案 1 :(得分:2)

首先,你在字符串的开头和结尾有一些额外的空格,所以做lin .strip()会删除它。

然后,您可以使用str.split()在第一个"分割:

>>> lin.strip().split(' "', 1)
['<abc<hd <>', 'abc"d" ef"']

我们用作第二个参数的1告诉python只将它拆分一次,因此不会每隔一个"拆分。

答案 2 :(得分:1)

另一种RegEx解决方案

import re
lin=' <abc<hd <> "abc\"d\" ef" '
matching = re.match("\s+(.*?)\s+(\"(.*)\")", lin)
print [matching.group(1), matching.group(2)]

<强>输出

['<abc<hd <>', '"abc"d" ef"']

答案 3 :(得分:0)

>>> lin=' <abc<hd <> "abc\"d\" ef" '
>>> lin.split('"', 1)
[' <abc<hd <> ', 'abc"d" ef" ']