python3正则-表达式

1、介绍

这里整理了表达式,即pattern参数的语法。其本质是一个str类型。

2、开始和结尾

(1)^

  • ^匹配字符串的开头

(2)$

  • $匹配字符串的末尾

(3)整体匹配

  • 同时使用^和$

3、匹配次数

(1)贪婪匹配和非贪婪匹配模式

  • 贪婪匹配,在允许的范围内尽可能多的匹配表达式次数。比如*、+、{n, m}等
  • 非贪婪匹配,在允许的范围内尽可能少的匹配表达式次数。使用?

(2)*

  • 匹配0或任意多次表达式

(3)+

  • 匹配至少1次表达式

(3)?

  • 匹配0或1次表达式
  • 这是非贪婪模式,即如果有匹配,只匹配1次

(4){n}

  • 精确匹配n次表达式

(5){n,m}

  • 匹配n-m范围内数目的表达式次数
  • 如果是{n,}表示最少,{,m}表示最多

4、包含和不包含

(1)[]

  • 表示匹配一个字符,其是在[和]之间的任意字符
  • 在[]之内除了-字符,其他字符都是作为单个的匹配字符,表示其本身,包括.+*?等

(2)[^]

  • 表示匹配一个字符,其是在[^和]之间的字符之外的任意字符

5、字符替代

(1)-

  • 使用-可以将数字和字母进行很方便的范围指定,比如a-z,0-3,A-G

(2).

  • .匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
  • 注意,.字符在[]或[^]中时,仅表示.字符本身,即使此时设置为flags=re.DOTALL。实际上,这也是合理的,毕竟如果想要匹配所有字符,直接使用.且指定flags=re.DOTALL,替代[.]更有效。
  • 如果不想指定flags,那么可以使用[\s\S]这样的操作

(3)\集合

\小写字母表示包含,\大写字母表示非,匹配的都是一个字符

  • \w 匹配字母数字及下划线
  • \W 匹配非字母数字及下划线
  • \s 匹配任意空白符,等价于[ \t\n\r\f]
  • \S 匹配任意非空白字符
  • \d 匹配任意数字,等价于[0-9]
  • \D 匹配任意非数字

(4)\转义字符

  • \n 换行符
  • \r
  • \t 制表符

6、()

()可以定义表达式

  • 如果没有(),那么*等操作的表达式是其前面的单独的字符(比如a)、转义字符(比如\n)等
  • 而()可以定义一个表达式,在此基础上可以设置匹配次数等操作

()也可以作为分组,这需要使用的函数进行搭配

  • 单匹配的match、fullmatch和search函数不支持分组,会匹配pattern表示的整体,并返回整体部分,作为re.Match类型对象。当然,调用re.Match类型对象的groups方法,可以进行分组操作
  • findall函数支持分组
    • 当pattern中不存在()时,是普通的匹配,将待匹配字符串中所有的匹配项作为list的直接元素
    • 当pattern中存在一个()时,按照pattern进行匹配,但只将()中的范围作为list的直接元素
    • 当pattern中存在不止一个()时,每一个pattern匹配的结果作为list的一个元素,类型是元组tuple(),而元组内的元素是pattern中各()定义的范围。其序列是先从外到内,然后从左到右包含在元组中。
posted @ 2023-04-15 12:43  挖洞404  阅读(35)  评论(0编辑  收藏  举报