欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python re正则模块

程序员文章站 2022-07-10 14:03:10
...

python re正则模块

  1. 举例

    life is short, i love python
    # 我要验证这个字符串最后一个单词是不是life
    # 我想拿到这个字符串中第三个单词,
    # 都可以通过正则实现,现在来学习python re模块的使用
    
  2. re模块使用

    # 导入re模块
    import re
    
    # 使用match方法进行匹配操作
    result = re.match(正则表达式,要匹配的字符串)
    
    # 如果上一步匹配到数据的话,可以使用group方法来提取数据
    result.group()
    
    # 第一个re模块函数,match:从字符串的第一个字符开始匹配
    
    # 示例
    import re
    
    # result = re.match("life", "life is short, i love python")
    result = re.match("is", "life is short, i love python")
    
    print(result)
    
    # re.match() 能够匹配出以xxx开头的字符串
    
  3. 匹配单个字符

    上面我们了解到通过re模块能够完成使用正则表达式来匹配字符串,接下来我们讲解正则表达式的单字符匹配

    import re
    
    """
    .   匹配任意一个字符(除了\n)
            '\r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖;
            '\n' 换行,换到当前位置的下一行,而不会回到行首;
            那就是windows在写入文件的时候把一个\n转换成了\r\n,\r保持不变,记事本只认\r\n
    []    匹配[]中列举的一个字符
    \d    匹配一个数字,即0-9
    \D    匹配非数字
    \s    匹配空白,即空格,tab键
    \S    匹配非空白
    \w    匹配单词字符,即a-z,A-Z,0-9,_
    \W    匹配非单词字符
    """
    
    ret = re.match(".", "M")
    # ret = re.match(".|\n", "\n")
    # ret = re.match(".", "\n", re.S) # 匹配\n的两种方法
    # ret = re.match("[.\n]", "\n")
    print(ret.group())
    
    ret = re.match("t.o", "too")
    print(ret.group())
    
    ret = re.match("t.o", "two")
    print(ret.group())
    

    其他的不讲了

  4. 匹配多个字符

    import re
    
    """
    *  匹配一个字符出现0次或者无限次
    +  匹配一个字符出现1次或者无限次
    ?  匹配一个字符出现1次或者0次
    {m}       匹配一个字符出现m次
    {m,n}  匹配一个字符出现m次到n次
    """
    
    ret = re.match("A-Z*", "Aabcdef")
    print(ret.group())
        
    # 题目1:匹配一个字符串是不是163的邮箱地址,且@符号之前有4到20位,例如[email protected]
    
    ret1 = re.match("[a-zA-Z0-9]{4,20}@163.com", "[email protected]")
    print(ret1.group())
    
    # 注意点
    # 1.{}不能有空格,2.\w可以匹配汉字  3..要转义  4.结尾的问题
    ret1 = re.match("\w{4, 20}@163.com", "[email protected]")
    print(ret1.group())  # 错误示范
    
  5. 匹配开头结尾

    import re
    """
    ^  匹配字符串开头
    $  匹配字符串结尾
    """
    # 题目1:匹配出163的邮箱地址,且@符号之前有4到20位,例如[email protected]
    ret1 = re.match("\w{4,20}@163\.com$", "[email protected]")
    print(ret1.group())
    
    # match就是从头开始匹配
    
  6. 匹配分组

    """
    |  匹配左右任意一个表达式
    (ab)   将括号中的字符作为一个分组
    \num   引用分组num匹配到的字符串
    (?P<name>) 分组起别名
    (?P=name)  引用别名为name分组匹配到的字符串
    """
    
    print("\\n")
    # |    匹配左右任意一个表达式
    ret = re.match("a|b", "a")
    print(ret.group())
    
    # (ab) 将括号中的字符作为一个分组
    ret = re.match("\w{4,20}@(163|126|qq).com", "[email protected]")
        if ret:
               print(ret.group(1))
            
           # 如果打印group(1)可以得到分组的结果
           else:
            print("不是163、126、qq邮箱")  # 不是163、126、qq邮箱
               
      
    # \num 引用分组num匹配到的字符串
    ret = re.match("<[a-zA-Z]>\w</[a-zA-Z]*>", "<html>hh</htmlbalabala>")
    print(ret.group())
    # 不行
    # 引用分组
    
    ret = re.match(r"<([a-zA-Z])>\w</\1>", "<html>hh</html>