python 正则表达式

十二:正则表达式
            我们判断一个字符串是否是合法的Email的方法是:1 创建一个匹配的Email正则表达式 2:用改正则表达式去匹配用户的输入来判断是否合法。
            \d表示可以匹配一个数字  
            \w表示可以匹配一个字母或者数字
            . 可以匹配任意字符
            *表示任意个字符
            +表示一个或者多个字符
            ?表示0个或者一个字符
            {n}表示n个字符
            {n,m} 表示n~m个字符
            要做更精确的匹配 可以用[]表示范围
            [0-9a-zA-Z\_] 表示可以匹配一个数字 字母或者下划线
            A|B 表示匹配A或者B
            ^表示行的开头  ^\d表示必须以数字开头
            $表示行的结束    \d$表示必须以数字结尾
            
            python 提供re模块 包含了所有的正则表达式的功能
            >>>import re
            >>>re.match(r'^\d{3}\-\d{3,8}$','010-12345')
            <_sre.SRE_Match object at 0x23984242>
            >>>re.match(r'^\d{3}\-\d{3,8}','010 12345')
            >>>
            match 方法判断是否匹配成功 如果匹配成功 返回一个match对象 否则返回None 常见的判断方法就是:
            test='用户输入的数据'
            if re.match(r'正则表达式',test):
                print 'ok'
            else:
                print 'failed'
            用正则表达式切分字符串 比用固定的字符 更加的灵活 正常一般如下:
                    >>>'a b  c'.split(' ')
                    ['a','b','','','c']
            无法识别连续的空格 二用正则表达式:
                    >>>re.split(r'\s+','a b  c')
                    ['a','b','c']
            无论多少个空格都可以正常分割
            除了简单的判断是否匹配外 正则表达式还有提取子串的强大功能 用()表示的就是要提取的分组
            ^(\d{3})-(\d{3,8})$分别定义了两个组 ,可以直接从匹配的字符串中提取出区号和本地号
                    >>>m=re.match(r' ^(\d{3})-(\d{3,8})$ ','010-12345')
                    >>>m
                    <_sre.SRE_Match object at 0x12312414>
                    >>>m.group(1)
                    '010'
                    >>>m.group(2)
                    >>>'12345'
            如果正则表达式中定义了组 就可以在Match对象上用group()方法提取出子串来 注意的是 group(0)永远是元是字符串 group(1) group(2) 表示第1,2,。。个子串
            
            贪婪匹配: 正则表达式默认的是贪婪匹配 也就是匹配的尽可也能多的字符 比如想要匹配出数字后面的0
                    >>>re.match(r'^(\d+)(0*)$','102300').groups()
                    ('102300','')
            由于\d+采用的是贪婪匹配 所以数字后面的0都被匹配上了 结果0*就只能匹配空字符串了 必须让、\d+采用非贪婪匹配就需要使用?  也就是 \d+?
                      >>>re.match(r'^(\d+?)(0*)$','102300').groups()
                    ('1023','00')

           当我们在Python中使用正则表达式的时候 re模块内部会干两件事情:
                1:编译正则表达式 如果正则表达式的字符串本身不合法就会报错
                2:用编译后的正则表达式去匹配字符串
            如果一个正则表达式重复使用几千次  我们可以预编译改正则表达式 接下来重复使用的时候就不需要编译这个步骤了
                    >>>import re
                    #编译
                    >>>re_telephone=re.compile(r'^(\d{3})-(\d{3,8})$')
                    #使用
                    >>>re_telephone.match('010-12345').groups()
                    ('010','12345')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值