美文网首页
python正则案例

python正则案例

作者: 方煜逵 | 来源:发表于2017-12-19 17:49 被阅读0次
    在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为re

    1. re模块的使用过程

        #coding=utf-8
    
        # 导入re模块
        import re
    
        # 使用match方法进行匹配操作
        result = re.match(正则表达式,要匹配的字符串)
    
        # 如果上一步匹配到数据的话,可以使用group方法来提取数据
        result.group()
    

    re.match是用来进行正则匹配检查的方法,若字符串匹配正则表达式,则match方法返回匹配对象(Match Object),否则返回None(注意不是空字符串"")。
    匹配对象Macth Object具有group方法,用来返回字符串的匹配部分。

    2. re模块示例(匹配以cellboxer开头的语句)

        #coding=utf-8
    
        import re
    
        result = re.match("cellboxer","cellboxer.com")
    
        result.group()
    

    运行结果为:cellboxer

    3.表示字符

    字符 功能
    . 匹配任意1个字符(除了\n)
    [ ] 匹配[ ]中列举的字符
    \d 匹配数字,即0-9
    \D 匹配非数字,即不是数字
    \s 匹配空白,即 空格,tab键
    \S 匹配非空白
    \w 匹配单词字符,即a-z、A-Z、0-9、_
    \W 匹配非单词字符
    示例1: . 匹配任意1个字符(除了\n)
    ret = re.match('.','a')
    ret.group()
    'a'
    ret = re.match('.','ab')
    ret.group()
    'a'
    
    示例2:\d 匹配数字,即0-9
    ret = re.match('\d','110')
    ret.group()
    '1'
    
    示例3:\D 匹配非数字,即不是数字
    ret =  re.match('\D','@')
    ret.group()
    '@'
    
    示例4:\s 匹配空白,即 空格,\t,\r ,\n
    import re
    ret = re.match('\s',' ')
    ret.group()
    ' '
    ret = re.match('\s','\t')
    ret.group()
    '\t'
    ret = re.match('\s','\r')
    ret.group()
    '\r'
    ret = re.match('\s','\n')
    ret.group()
    '\n'
    
    示例5: \S 匹配非空白
    ret = re.match('\S','a')
    ret.group()
    'a'
    
    
    示例6: \w 匹配单词字符,即a-z、A-Z、0-9、_
    ret = re.match('\w','Abcd')
    ret.group()
    'A'
    
    示例7:匹配[ ]中列举的字符
    ret = re.match('1[345678]','13')
    ret.group()
    '13'
    ret = re.match('1[^345678]','19')
    ret.group()
    '19'
    ret = re.match('1[a-z5-9]','1b')
    ret.group()
    '1b'
    

    4 表示数量

    匹配多个字符的相关格式

    字符 功能
    * 匹配前一个字符出现0次或者无限次,即可有可无
    + 匹配前一个字符出现1次或者无限次,即至少有1次
    ? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
    {m} 匹配前一个字符出现m次
    {m,} 匹配前一个字符至少出现m次
    {m,n} 匹配前一个字符出现从m到n次
    示例1:*

    需求:匹配出,一个字符串第一个字母为大小字符,后面都是小写字母并且这些小写字母可有可无

    #coding=utf-8
    import re
    
    ret = re.match("[A-Z][a-z]*","Mm")
    ret.group()
    
    ret = re.match("[A-Z][a-z]*","Aabcdef")
    ret.group()
    
    image
    示例2:+
    #coding=utf-8
    import re
    
    ret = re.match("[a-zA-Z_]+[\w_]*","name1")
    ret.group()
    'name1'
    
    ret = re.match("[a-zA-Z_]+[\w_]*","_name")
    ret.group()
    '_name'
    
    
    示例3:?

    需求:匹配出,0到99之间的数字

    #coding=utf-8
    import re
    
    ret = re.match("[1-9]?[0-9]","7")
    ret.group()
    
    示例4:{m}

    需求:匹配出,8到20位的密码,可以是大小写英文字母、数字、下划线

    ret = re.match("[a-zA-Z0-9_]{8,20}","1ad12f23s34455ff66")
    ret.group()
    

    5.表示边界

    字符 功能
    ^ 匹配字符串开头
    $ 匹配字符串结尾
    \b 匹配一个单词的边界
    \B 匹配非单词边界
    示例1:$

    需求:匹配手机号码

    ret = re.match('1[3,4,5,7,8]\d{9}$','13500000000')
    ret.group()
    '13500000000'
    

    6.匹配分组

    字符 功能
    1 匹配左右任意一个表达式
    (ab) 将括号中字符作为一个分组
    \num 引用分组num匹配到的字符串
    (?P<name>) 分组起别名
    (?P=name) 引用别名为name分组匹配到的字符串
    示例1:|

    需求:匹配出0-100之间的数字

    import re
    
    while True:
        num = input('请输入\n')
    
        ret = re.match(r'[1-9]\d?$|0$|100$', num)
    
        try:
            result = ret.group()
            print('match result:',result)
        except AttributeError:
            print('not match!')
    
    示例2:( )

    需求:匹配出163、126、qq邮箱之间的数字

    while True:
        text = str(input('请输入\n'))
    
        ret = re.match(r'\w{4,20}@(163|126|qq)\.com', text)
    
        try:
            result = ret.group()
            print('match result:',result)
        except AttributeError:
            print('not match!')
    

    示例3:\number

    需求:

    匹配出 <html><h1>xiangzige</h1></html>
    
    ret = re.match(r'<(\w*)><(\w*)>.*</\2></\1>','<html><h1>xiangzige</h1></html>')
    try:
        result = ret.group()
        print('match result:',result)
    except AttributeError:
        print('not match!')
    

    示例4:(?P<name>) (?P=name)

    需求:匹配出<html><h1>xiangzige</h1></html>
    
    rule1 = r'<(\w*)><(\w*)>.*</\2></\1>'
    
    rule2 = r'<(?P<key1>\w*)><(?P<key2>\w*)>.*</(?P=key2)></(?P=key1)>'
    
    ret = re.match(rule2,'<html><h1>xiangzige</h1></html>')
    
    try:
        result = ret.group()
        print('match result:',result)
    except AttributeError:
        print('not match!')
    

    re模块的高级用法

    search

    需求:匹配出文章阅读的次数

    #coding=utf-8
    import re
    
    ret = re.search(r"\d+", "阅读次数为 9999")
    ret.group()
    
    findall

    需求:统计出python、c、c++相应文章阅读的次数

    #coding=utf-8
    import re
    
    ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")
    print ret
    
    sub 将匹配到的数据进行替换

    需求:将所有语言改为python

    import re
    
    result = re.sub(r'\w+(\s+|\b)','python ','java ios php js')
    
    print(result)
    
    split 根据匹配进行切割字符串,并返回一个列表

    需求:切割字符串“info:xiaoZhang 33 shandong”

    #coding=utf-8
    import re
    ret = re.split(r":| ","info:xiaoZhang 33 shandong")
    print ret
    

    相关文章

      网友评论

          本文标题:python正则案例

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