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

时间:2018-07-12 18:23:22

标签: python regex python-3.x pattern-matching regex-group

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

这是一个(非常简化的)特定示例,在该示例中,我尝试获取由字母数字字符+空格+数字组成并且在括号之间的所有字符串。结果应该是[“ 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

1 个答案:

答案 0 :(得分:1)

这是一种方法。

演示:

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']