0

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

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

进入

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

但是我的问题是当我使用re.findall(r'"(.*?)"', lin, 0). 我明白了

['abc', 'ef'] 

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

4

4 回答 4

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"']     
于 2013-09-29T13:25:23.373 回答
2

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

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

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

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

于 2013-09-29T12:14:07.810 回答
1

又一个正则表达式解决方案

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"']
于 2013-09-29T13:53:30.083 回答
0
>>> lin=' <abc<hd <> "abc\"d\" ef" '
>>> lin.split('"', 1)
[' <abc<hd <> ', 'abc"d" ef" ']
于 2013-09-29T12:03:28.180 回答