前面的正则匹配规则表中说过:

    1. (...) 被括起来的表达式将作为分组,每遇到一个左括号(,分组编号+1

    表示正则表达式中的分组通过从左到右计算其开括号来编号。
    例如表达式 ((A)(B(C))) 存在四个分组:

    1. 1 ((A)(B(C)))
    2. 2 (A)
    3. 3 (B(C))
    4. 4 (C)

    而组0始终代表整个表达式 ((A)(B(C)))。

    1. match_obj = re.match("((\w)(\w(\w)))", "ABC")
    2. print(match_obj.groups())
    3. print(match_obj.group(0))

    结果:

    1. ('ABC', 'A', 'BC', 'C') ABC
    1. 分组表达式可接数量词,|仅对当前分组有效

    又是什么含义呢?
    假如我们有一批字符串:

    1. brands = [
    2. "联想/LENOVO",
    3. "狮乐/SHILE",
    4. "美的/Midea",
    5. "联想/LENOVO",
    6. "松下/Panasonic",
    7. "红叶/RedLeaf", "纳米亚",
    8. "富士施乐/FujiXerox",
    9. "佳印",
    10. "佳能/CANON",
    11. "TCL"
    12. ]

    我们希望提取每个品牌的中文名称和英文名称,但是可能有些品牌只有中文名称,或者只有英文名称。
    这时我们可以在对应的分组加上数量词?表示可能出现一次也可能不出现:

    1. for brand in brands:
    2. print(brand, re.match(r"([^\w/]+)?/?(\w+)?", brand, re.A).groups())

    结果:

    1. 联想/LENOVO ('联想', 'LENOVO')
    2. 狮乐/SHILE ('狮乐', 'SHILE')
    3. 美的/Midea ('美的', 'Midea')
    4. 联想/LENOVO ('联想', 'LENOVO')
    5. 松下/Panasonic ('松下', 'Panasonic')
    6. 红叶/RedLeaf ('红叶', 'RedLeaf')
    7. 纳米亚 ('纳米亚', None)
    8. 富士施乐/FujiXerox ('富士施乐', 'FujiXerox')
    9. 佳印 ('佳印', None)
    10. 佳能/CANON ('佳能', 'CANON')
    11. TCL (None, 'TCL')

    这样就顺利的匹配到每个品牌对应的中文名称和英文名称。