正则表达式拆分字符串而不考虑引号中的空格

时间:2014-02-10 14:48:36

标签: python regex string split quotes

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']

请提供您的建议

2 个答案:

答案 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)

(?:表示非捕获组,使结果成为普通列表。)