您需要将捕捉必要部分的块匹配为两组,然后从组2中分割/提取您需要的部分。
^(\S+)\s+(.*(?:[\r\n]+ +.*)*)
细节
-
^
-线路起点(由于
re.M
-
(\S+)
-组1:一个或多个非空白字符
-
\s+
-1个或多个空格
-
(.*(?:[\r\n]+ +.*)*)
-
.*
-线路的其余部分
-
(?:[\r\n]+ +.*)*
-零次或多次出现
-
[\r\n]+
-
+
-一个或多个空格(您可以将其替换为
[^\S\r\n]*
匹配任何水平空白)
-
.*
-线路的其余部分
一
example code
import re
s = """aaa 111(zzz)
222
333
bbb 555
111"""
rx= r'^(\S+)\s+(.*(?:[\r\n]+ +.*)*)'
res =[]
for m in re.finditer(rx, s, re.M):
res.append((m.group(1), re.findall(r"[0-9]+", m.group(2))))
print(res)