string = 'protein219 Info=Acidfast Name="Mycobacterium smegmatis" pcp=36789'
我想拆分字符串忽略“”之间的空格。我使用下面的正则表达式来分割行
mystring = [s for s in re.split("( |\\\".*?\\\"|'.*?')", mystring) if s.strip()]
这给我的结果是
['protein219', 'Info=Acidfast', 'Name=' , '"Mycobacterium smegmatis"', 'pcp=','36789']
预期产出:
['protein219', 'Info=Acidfast', 'Name="Mycobacterium smegmatis"',' pcp=36789']
请提供您的建议
答案 0 :(得分:1)
请勿使用re.split()
:
>>> re.findall(r'(?:"[^"]*"|[^\s"])+', string)
['protein219', 'Info=Acidfast', 'Name="Mycobacterium smegmatis"', 'pcp=36789']
<强>说明:强>
(?: # Start of non-capturing group
"[^"]*" # Either match a quoted string
| # or
[^\s"] # anything besides spaces or quotes
)+ # End of group, match at least once
答案 1 :(得分:0)
你需要每个包含空格或引号之间空格的东西:
re.findall(r'[^\s]*".*"', string)
将匹配Name="Mycobacterium smegmatis"
re.findall(r'[^\s]+', string)
将匹配所有其他人。结合:
re.findall(r'(?:[^\s]*".*")|(?:[^\s]+)', string)
(?:表示非捕获组,使结果成为普通列表。)