Python 正则表达式拆分字符串,不考虑引号中的空格
我想分割字符串,忽略“”之间的空格。我正在使用下面的正则表达式来拆分行Python 正则表达式拆分字符串,不考虑引号中的空格,python,regex,string,split,quotes,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=' ,
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']
请提供您的建议不要为此使用re.split()
:
['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
将匹配Name=“耻垢分枝杆菌”
将匹配所有其他的。合并:
re.findall(r'[^\s]+', string)
(?:表示非捕获组,使结果成为一个简单的列表。)@Bergi:我不这么认为,因为so想捕获“与它一起”之前的单词,这表明它非常有效
re.findall(r'[^\s]*".*"', string)
re.findall(r'[^\s]+', string)
re.findall(r'(?:[^\s]*".*")|(?:[^\s]+)', string)