美文网首页
正则表达式

正则表达式

作者: viean | 来源:发表于2018-05-22 22:21 被阅读0次

    先说下字符串转义
    如下两种形势都可以表示字符串:'ABC-001'
    s = 'ABC\-001'
    s = r'ABC-001' #r前缀,就不用考虑转义的问题了

    利用re模块进行正则匹配

    >>> import re
    >>> re.match(r'^\d{3}\-\d{3,8}$', '010-123456')
    <_sre.SRE_Match object at 0x10e4fbac0>
    >>> re.match(r'^\d{3}\-\d{3,8}$', '010 123456')
    

    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']
    #不仅用空格切分
    >>> re.split(r'[\s\,]+', 'a, b,  c,,d')
    ['a', 'b', 'c', 'd']
    

    正则提取--分组

    通过()提取待匹配内容中的子串.

    >>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-5668832')
    >>> m.group(0)
    '010-5668832'
    >>> m.group(1)
    '010'
    >>> m.group(2)
    '5668832'
    

    贪婪匹配

    正则默认为贪婪匹配,如下面的例子;

    >>> re.match(r'^(\d+)(0*)$', '102300').groups()
    ('102300', '')
    # +表示至少一个字符,由于默认为贪婪匹配,所以后面的0匹配不上内容;
    >>>
    # \d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配
    >>> re.match(r'^(\d+?)(0*)$', '102300').groups()
    ('1023', '00')
    

    正则表达式编译

    python re模块每次使用正则表达式时,都需要进行编译,之后进行匹配。如果当一个正则表达式需要多次匹配,可以先将其编译,之后多次匹配。

    >>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
    >>> re_telephone.match('010-12345').groups()
    ('010', '12345')
    >>> re_telephone.match('010-8086').groups()
    ('010', '8086')
    

    相关文章

      网友评论

          本文标题:正则表达式

          本文链接:https://www.haomeiwen.com/subject/dyqflftx.html