哪个正则表达式将获得 python 中开始正则表达式和结束正则表达式之间的所有组匹配?

Which regular expression will get all group matches between start regex and end regex in python?

我尝试获取 python 中第一次出现的开始正则表达式和最后一次出现的结束正则表达式之间的所有组匹配。

这是一个(非常简化的)具体示例,其中我尝试获取所有由字母数字字符 + 白色 space + 数字组成且位于括号之间的字符串。结果应该是 ["B 2"、"C 3"、"D 4"],但我没有让它工作。

import re

s = "A 1 (B 2 C 3 D 4) E 5"

re.findall("(\w+\s\d+)", s)                   # ['A 1', 'B 2', 'C 3', 'D 4', 'E 5']
re.findall("(?<=\()(\w+\s\d+)", s)            # ['B 2']
re.findall("(\w+\s\d+)(?=\))", s)             # ['D 4']
re.findall("(?<=\()(\w+\s\d+)(?=\))", s)      # []

# desired result: ["B 2", "C 3", "D 4"]

我的尝试没有限制搜索区域,而是修改了组匹配本身的模式,这是我不想实现的。

非常感谢帮助。

此致

AFoeee

这是一种方法。

演示:

import re

s = "A 1 (B 2 C 3 D 4) E 5"
m = re.search(r"\((?P<content>.*?)\)", s)
if m:
    val = m.group("content")
    print(re.findall(r"\w\s+\d", val))

输出:

['B 2', 'C 3', 'D 4']

如果括号中有多个值则

s = "A 1 (B 2 C 3 D 4) E 5 (X 2 Y 3 Z 4) V 4"
for m in  re.findall(r"\(.*?\)", s):
    print(re.findall(r"\w\s+\d", m))

输出:

['B 2', 'C 3', 'D 4']
['X 2', 'Y 3', 'Z 4']