前面的正则匹配规则表中说过:
(...) 被括起来的表达式将作为分组,每遇到一个左括号(,分组编号+1。
表示正则表达式中的分组通过从左到右计算其开括号来编号。
例如表达式 ((A)(B(C))) 存在四个分组:
1 ((A)(B(C)))2 (A)3 (B(C))4 (C)
而组0始终代表整个表达式 ((A)(B(C)))。
match_obj = re.match("((\w)(\w(\w)))", "ABC")print(match_obj.groups())print(match_obj.group(0))
结果:
('ABC', 'A', 'BC', 'C') ABC
分组表达式可接数量词,|仅对当前分组有效
又是什么含义呢?
假如我们有一批字符串:
brands = ["联想/LENOVO","狮乐/SHILE","美的/Midea","联想/LENOVO","松下/Panasonic","红叶/RedLeaf", "纳米亚","富士施乐/FujiXerox","佳印","佳能/CANON","TCL"]
我们希望提取每个品牌的中文名称和英文名称,但是可能有些品牌只有中文名称,或者只有英文名称。
这时我们可以在对应的分组加上数量词?表示可能出现一次也可能不出现:
for brand in brands:print(brand, re.match(r"([^\w/]+)?/?(\w+)?", brand, re.A).groups())
结果:
联想/LENOVO ('联想', 'LENOVO')狮乐/SHILE ('狮乐', 'SHILE')美的/Midea ('美的', 'Midea')联想/LENOVO ('联想', 'LENOVO')松下/Panasonic ('松下', 'Panasonic')红叶/RedLeaf ('红叶', 'RedLeaf')纳米亚 ('纳米亚', None)富士施乐/FujiXerox ('富士施乐', 'FujiXerox')佳印 ('佳印', None)佳能/CANON ('佳能', 'CANON')TCL (None, 'TCL')
这样就顺利的匹配到每个品牌对应的中文名称和英文名称。
