我试图在python中解析,其中包含此格式的信息
aaa 111(zzz)
222
333
bbb 555
111
这是一种将aaa
与111
,222
和333
(一种参考表)联系起来的方法。请注意,zzz
是可选的,尽管现在并不重要。
我想获得的是这样的:
匹配1
- 第1组。'AAA'
- 第2组。['111','222','333']
匹配2
- 第1组。'BBB'
- 第2组。['555','111']
我正在挣扎的是如何使group 2
作为数组。尽管我可能以错误的方式走。
有人可以照亮我吗?
这是我目前的尝试。不过,它甚至还没有我尝试实现的目标。
update
我将使用Python,很可能将re
用作Regex模块。
您需要匹配将必要部分捕获为两组的块,然后将/从组2分开/提取所需的东西。
^(S+)s+(.*(?:[rn]+ +.*)*)
详细信息
-
^
-线的开始(由于re.M
) -
(S+)
-组1:一个或多个非Whitespace Chars -
s+
-1或更多Whitespaces -
(.*(?:[rn]+ +.*)*)
-组2:-
.*
-线的其余部分 -
(?:[rn]+ +.*)*
-零或更多的出现-
[rn]+
-1或更多的线路断路chars -
+
-一个或多个空间(您可以用[^Srn]*
替换它以匹配任何水平空间) -
.*
-线的其余部分
-
-
示例代码
import re
s = """aaa 111(zzz)
222
333
bbb 555
111"""
rx= r'^(S+)s+(.*(?:[rn]+ +.*)*)'
res =[]
for m in re.finditer(rx, s, re.M):
res.append((m.group(1), re.findall(r"[0-9]+", m.group(2))))
# res.append((m.group(1), m.group(2).split())) # or split with whitespace
print(res) # => [('aaa', ['111', '222', '333']), ('bbb', ['555', '111'])]