Python教程

Python高级-正则表达式

本文主要是介绍Python高级-正则表达式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

正则表达式

一、匹配单个字符

字符 功能
. 匹配任意1个字符(除了\n)
[] 匹配[ ]中列举的字符
\d 匹配数字,即0-9
\D 匹配⾮数字,即不是数字
\s 匹配空⽩,即 空格,\t-tab键 \n-换⾏
\S 匹配⾮空⽩
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配⾮单词字符
  • . 匹配任意单个字符(除\n)

  • [] 列举,匹配 [] 中列举的内容

    [ab] 匹配 a 或者 b

    [a-z] 匹配所有的小写字母

    [A-Z] 匹配大写字母

    [0-9] 匹配数字

    [a-zA-Z] 匹配所有的小写字母和大写字母

  • \d 匹配所有的数字 等价于 [0-9]

  • \D 非数字

  • \s 空格

  • \S 非空格

  • \w 匹配 字母、数字、下划线

    [a-zA-Z0-9_]

  • \W 非数字、非字母、非下划线

二、匹配多个字符

  • * 表示前一个字符出现 0次或者 无限次

  • + 表示 前一个字符出现 1次或者 无限次

  • ? 表示 前一个字符出现 0 次或者 1次 (要不不出现,要不只能出现一次)

  • {m} 表示前一个字符,连续出现 m次

  • {m,n} 表示前一个字符,连续出现最少m次,最多n次

三、匹配开头结尾

  • ^ 表示 匹配 以后一个字符开头

    ^ 有两个作用:

    1)匹配以 指定字符开头

    ^[a-zA-Z_]+\w   # 必须以 小写字母、大写字母、下划线开头
    

    2)用在 [] 内部,用于取反

    [^he] 匹配不含有 h 和 e 的字符
    
  • $ 表示匹配 以前一个字符结尾

    \d$ 以数字结尾

四、re模块操作

  • re模块的作用: python提供的用于正则操作的模块

  • re模块的使用步骤:

    • 导入模块

      import re

    • 使用match() 方法进行检测

      # 2、通过 match 方法,验证正则
      # re.match("正则表达式", "要验证/检测的字符串")
      # match() 方法如果匹配成功,返回 match object 对象
      # match() 方法如果匹配失败,返回 None
      #        正则字符串    要检测的内容
      result = re.match("\w{4,20}@163\.com$", "hello@163.com")
      
    • 判断是否检测/匹配成功

      if result:
      
      print("成功")
      
      else:
      
      print("失败")
      
    • 取出匹配的具体内容

      result.group() 获取匹配的具体内容

五、匹配分组

字符 功能
| 匹配左右任意⼀个表达式
(ab) 将括号中字符作为⼀个分组
\num 引⽤分组num匹配到的字符串
(?P) 分组起别名
(?P=name) 引⽤别名为name分组匹配到的字符串

匹配分组之"|"

  • | 的作用:或者关系,多个正则表达式满足任意一个都可以

    ^[0-9]?[0-9]$|^100$   # ^[0-9]?[0-9]$ 满足或者 ^100$ 满足任意一个,返回值都是一个
    match object 对象(匹配成功)
    

匹配分组之"()"

  • 分组,整体匹配

    result = re.match("\w{4,20}@(163|126|qq|sina)\.com$", "hello@126.com")
    

    把 @ .... ".com" 之间的内容整体进行匹配

  • 提取子字符串

    ​ 1 2

    result = re.match("(\d{3,4})-(\d{7,8})", "010-12345678")`

    result.group() 获取的是匹配的结果

    result.group(1) 获取的是第一个括号中的内容

    result.group(2) 获取的是第二个括号中的内容

匹配分组之‘\’

  • 引用 分组

    \1 表示引用第一组

    # result = re.match("<([a-zA-Z0-9]+)>.*</\\1>", "<html>asdbasldfj</html>")
    result = re.match("<([a-zA-Z0-9]+)><([a-zA-Z0-9]+)>.*</\\2></\\1>", "<html><h1>asdbj</h1></html>")
    

    \\1 表示引用第一组 ,\\是转义字符,转义后代表一个 \

    \\2 表示引用第二组

  • 分组起别名

    • 起名

      ?P 给分组起别名,别名为name1

    • 引用别名

      ?P=name1 引用别名为 name1的分组

    • 整体代码:

      result = re.match("<(?P<name1>[a-zA-Z0-9]+)><(?P<name2>[a-zA-Z0-9]+)>.*</(?P=name2)></(?P=name1)>", "<html><h1>asdbj</h1></html>")
      

六、re模块的高级用法

  • search() 在需要匹配的字符串中搜索要匹配的内容

    result = re.search("\d+", "阅读次数:9999")

    知道 match 和 search的区别

    # 1)match 从需要检测.group的字符串的开头位置匹配,如果失败返回 None
    # 2)search 从需要检测的字符串中搜索满足正则的内容,有则返回match object对象
    
  • findall() 在需要匹配的字符串中查找所有满足正则的内容,返回值是列表

    result = re.findall("\d+", "阅读次数:9999,转发次数:6666,评论次数:38")

  • sub("正则表达式", "新的内容", "要替换的字符串") 字符串替换(按照正则,查找字符串并且替换为指定的内容)返回值是替换后的字符串

    result = re.sub("\d+", "10000", "阅读次数:9999,转发次数:6666,评论次数:38")

  • split("正则表达式", "待拆分的字符串") 按照正则拆分字符串,返回值是一个列表

    result = re.split("

这篇关于Python高级-正则表达式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!