我想拆分下面提到的字符串:
lin=' <abc<hd <> "abc\"d\" ef" '
到
[<abc<hd <>, "abc\"d\" ef"]
但是我的问题是当我使用re.findall(r'"(.*?)"', lin, 0)
拆分字符串时。我得到了
['abc', 'ef']
有人可以指导我如何在Python中拆分字符串吗?
答案 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" ']