正则表达式分组匹配

0 投票
1 回答
533 浏览
提问于 2025-04-16 15:21

我正在尝试匹配一个模式,像这样:

模式: (abc)(def)(ghi)h
匹配结果:
组 0 = [a,b,c]
组 1 = [d,e,f]
组 2 = [g,h,i]
组 3 = h

通过正则表达式,有可能把数据提取成这样一个列表吗?

这里使用的代码是Python,供参考。

1 个回答

2

据我所知,这个在一个正则表达式中是做不到的。你可以试试这样的做法:

import re

matches = re.findall('[^()]+', '(abc)(def)(ghi)h')
map = []
for m in matches: 
  map.append(list(m))
for e in map:
  print e

这段代码会输出:

['a', 'b', 'c']
['d', 'e', 'f']
['g', 'h', 'i']
['h']

编辑

这里的模式 [^()] 是用来匹配除了 () 以外的任何字符,所以 [^()]+ 就是匹配一个或多个不是 () 的字符。

[] 之间的内容叫做字符类,它总是只匹配一个字符。开头的 ^ 表示这是一个否定字符类,也就是说它会匹配所有不在这个字符类中的字符。

关于字符类的更多信息,可以查看这个链接:http://www.regular-expressions.info/charclass.html

撰写回答