我想拆分下面提到的字符串:
lin=' <abc<hd <> "abc\"d\" ef" '
进入
[<abc<hd <>, "abc\"d\" ef"]
但是我的问题是当我使用re.findall(r'"(.*?)"', lin, 0)
. 我明白了
['abc', 'ef']
有人可以指导我如何在 Python 中拆分字符串吗?
我想拆分下面提到的字符串:
lin=' <abc<hd <> "abc\"d\" ef" '
进入
[<abc<hd <>, "abc\"d\" ef"]
但是我的问题是当我使用re.findall(r'"(.*?)"', lin, 0)
. 我明白了
['abc', 'ef']
有人可以指导我如何在 Python 中拆分字符串吗?
这是使用正则表达式的解决方案。
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"']
首先,字符串的开头和结尾有一些额外的空格,所以这样做lin .strip()
会删除它。
然后,您可以使用str.split()
第一个拆分"
:
>>> lin.strip().split(' "', 1)
['<abc<hd <>', 'abc"d" ef"']
我们1
用作第二个参数告诉 python 只拆分一次,因此不要每隔一个拆分一次"
。
又一个正则表达式解决方案
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"']
>>> lin=' <abc<hd <> "abc\"d\" ef" '
>>> lin.split('"', 1)
[' <abc<hd <> ', 'abc"d" ef" ']