re模块 | 关于分组

正则表达式:

r'''(
    (\d{3}|\(\d{3}\))?    #area code
    (\s|-|\.)?            #seperator
    (\d{3})               #first three digits
    (\s|-|\.)             #seperator
    (\d{4})               #last four digits
    (\s*(ext|x|ext.)\s*(\d{2,5}))?    #extension
    )''', re.VERBOSE

输入:
415-863-9900 ext 23123
输出:

总结分组规则:

  1. 最外层() 匹配group(0) -----0
  2. 其他的开始正常匹配 ------ 1-5
  3. 然后到(\s*(ext|x|ext.)\s*(\d{2,5}))?
    (\s*(ext|x|ext.)\s*(\d{2,5}))?的全部匹配 ------6
    开始匹配里面的值 --------7-8
    7对应(ext|x|ext.) 8对应(\d{2,5})
    这个是匹配 空字符 零次或多次 + ext + 空字符 零次或多次 +数字2-5个
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。