Python:如何使用正则表达式获得所有可能的匹配

Python:如何使用正则表达式获得所有可能的匹配,python,regex,python-3.x,Python,Regex,Python 3.x,我试图找到括号之间的文本,但我想要这样的东西 s="( abc (def) kkk ( mno) sdd ( xyz ) )" p=re.findall(r"\(.*?\)",s) for i in p: print(i) 输出: ( abc (def) , ( mno), ( xyz ) # d defaultdict(<class 'list'>, {'(': [0, 6, 16, 27], ')': [10, 21, 33, 35]}) # p

我试图找到括号之间的文本,但我想要这样的东西

 s="( abc (def) kkk ( mno) sdd ( xyz ) )"
 p=re.findall(r"\(.*?\)",s)
    for i in p:
        print(i)
输出:

( abc (def) ,
( mno),
( xyz )
# d
defaultdict(<class 'list'>, {'(': [0, 6, 16, 27], ')': [10, 21, 33, 35]})

# pos
[(0, 10), (0, 21), (0, 33), (0, 35), (6, 10), (6, 21), (6, 33), (6, 35), 
 (16, 10), (16, 21), (16, 33), (16, 35), (27, 10), (27, 21), (27, 33), (27, 35)]

# texts from pos
( abc (def)
( abc (def) kkk ( mno)
( abc (def) kkk ( mno) sdd ( xyz )
( abc (def) kkk ( mno) sdd ( xyz ) )
(def)
(def) kkk ( mno)
(def) kkk ( mno) sdd ( xyz )
(def) kkk ( mno) sdd ( xyz ) )
( mno)
( mno) sdd ( xyz )
( mno) sdd ( xyz ) )
( xyz )
( xyz ) )
预期:

( abc (def) ,
( abc (def) kkk ( mno) ,
( abc (def) kkk ( mno) sdd ( xyz ) ,
( abc (def) kkk ( mno) sdd ( xyz ) ) ,
(def) ,
(def) kkk ( mno)  ,
(def) kkk ( mno) sdd ( xyz ) ,
(def) kkk ( mno) sdd ( xyz ) ) ,
( mno) ,
( mno) sdd ( xyz ) ,
( mno) sdd ( xyz ) ) ,
( xyz ) ,
( xyz ) ) 

python正则表达式模块不处理重叠匹配。通过查找文本中
的位置,为起始值/结束值创建合理的元组,并对字符串进行切片,可以更容易地获取:

使用,以及:

s=“(abc(def)kkk(mno)sdd(xyz))”
#获取所有打开和关闭的位置()
从集合导入defaultdict
d=默认DICT(列表)
印刷品(d)
对于idx,枚举中的c:
如果c在“()”中:
d[c]。追加(idx)
#合并所有位置
来自itertools进口产品
pos=列表(产品(d[”(“],d[”))
打印(pos)
#如果开始<停止+1,则对文本进行切片,否则跳过
对于启动,在位置停止:
如果开始<停止+1:
打印(s[开始:停止+1])
输出:

( abc (def) ,
( mno),
( xyz )
# d
defaultdict(<class 'list'>, {'(': [0, 6, 16, 27], ')': [10, 21, 33, 35]})

# pos
[(0, 10), (0, 21), (0, 33), (0, 35), (6, 10), (6, 21), (6, 33), (6, 35), 
 (16, 10), (16, 21), (16, 33), (16, 35), (27, 10), (27, 21), (27, 33), (27, 35)]

# texts from pos
( abc (def)
( abc (def) kkk ( mno)
( abc (def) kkk ( mno) sdd ( xyz )
( abc (def) kkk ( mno) sdd ( xyz ) )
(def)
(def) kkk ( mno)
(def) kkk ( mno) sdd ( xyz )
(def) kkk ( mno) sdd ( xyz ) )
( mno)
( mno) sdd ( xyz )
( mno) sdd ( xyz ) )
( xyz )
( xyz ) )
#d
defaultdict(,{'(':[0,6,16,27],'):[10,21,33,35]})
#位置
[(0, 10), (0, 21), (0, 33), (0, 35), (6, 10), (6, 21), (6, 33), (6, 35), 
(16, 10), (16, 21), (16, 33), (16, 35), (27, 10), (27, 21), (27, 33), (27, 35)]
#来自pos的文本
(abc(def)
(abc(def)kkk(mno)
(abc(def)kkk(mno)sdd(xyz)
(abc(def)kkk(mno)sdd(xyz))
(def)
(def)kkk(mno)
(def)kkk(mno)sdd(xyz)
(def)kkk(mno)sdd(xyz))
(mno)
(mno)sdd(xyz)
(mno)sdd(xyz))
(xyz)
(xyz))

python正则表达式模块不处理重叠的结果-您需要对多个正则表达式搜索结果进行解析谢谢..如何在python中获得重叠的匹配?非常感谢您提供了出色的解决方案。。。今天学到了一些东西:)