这里我的原始文本内容为:
'chiplet A part B clk C load_count D cts_root E chiplet_hier "1 2 3 4 5 6 7 "\n'
我想匹配每一个词,并且忽略双引号内的空格分割。
因此想到了用Python的正则表达式,写法如下:
In [1]: import re
In [2]: line = 'chiplet A part B clk C load_count D cts_root E chiplet_hier "
...: 1 2 3 4 5 6 7 "\n'
...: temp_data = re.findall(r'[^\s\"\']+|"([^"]*)"',line)
但是输出却是:
In [3]: temp_data
Out[3]: ['', '', '', '', '', '', '', '', '', '', '', '1 2 3 4 5 6 7 ']
单独测试[^\s\"\']+
和"([^"]*)"
都能获得正常的输出,唯独加在一起不行。
想了半天没想明白哪里出问题,最后发现是因为"([^"]*)"
加了括号的缘故。
正则匹配表达式,如果加了()就代表按照group输出,输出会输出每一次匹配的结果,与一个不带空格的做或,会使得前面匹配的结果丢失。
从 re.findall
的文档可以发现:
If one or more groups are present in the pattern, return a list of groups; this will be a list of tuples if the pattern has more than one group.
这里去掉空格:
In [4]: line = 'chiplet A part B clk C load_count D cts_root E chiplet_hier "
...: 1 2 3 4 5 6 7 "\n'
...: temp_data = re.findall(r'[^\s\"\']+|"[^"]*"',line)
In [5]: temp_data
Out[5]:
['chiplet',
'A',
'part',
'B',
'clk',
'C',
'load_count',
'D',
'cts_root',
'E',
'chiplet_hier',
'"1 2 3 4 5 6 7 "']
是个很蠢得问题,但是卡了半天没找到原因所在。