python中正则表达式

概述

正则表达式,Regular Expression,缩写为regex、regexp、RE等。
正则表达式是文本处理极其重要的技术,用它可以对字符串按照某种规则进行检索、替换。
正则表达式应用及其广泛,shell中处理文本的命令、各种高级编程语言都支持正则表达式。

分类

1、BRE:正则表达式,grep、sed、vi等软件支持。vim有扩展
2、ERE:扩展正则表达式,egrep(grep-E)、sed-r等
3、PCRE:几乎所有高级语言都是PCRE的方言或者变种。Python1.6开始使用SRE正则表达式引擎,可以认为是PCRE的子集。

基本语法

元字符metacharacter

代码说明举例
.匹配除换行符外任意一个字符.
[abc]字符集合,只能表示一个字符位置。匹配所包含的任意一个字符[abc]匹配plain中的‘a’
[^abc]字符集合,只能表示一个字符位置。匹配除去集合内字符的任意一个字符[^abc]可以匹配plain中的‘p’、‘l’、‘i’或者’n’
a-z字符范围,也是个集合,表示一个字符位置匹配所包含的任意一个字符常用A-Z[0-9
[^a-z]字符范围,也是个集合,表示一个字符位置匹配集合内字符的任意一个字符
\b匹配单词的边界\b b在文本中找到单词中b开头的b字符
\B不匹配单词的边界t\B包含t的单词但是不以t结尾的t字符
\d[0-9]匹配一位数字\d
\D[^0-9]匹配1位非数字
\s匹配1位空白字符,包括换行符、制表符、空格[\f\r\n\t\v]
\S匹配1位非空字符
\w匹配[a-zA-Z0-9]\w
\W匹配\w之外的字符

详细分析

  • . 只能匹配一个非换行符(\n、\r、\r\n)外任意一个字符
    在这里插入图片描述
  • [abc]字符集合,只能匹配一个括号内包含的字符
    在这里插入图片描述

在这里插入图片描述

  • [a-z]匹配除了a到z的其它字符,其中代表取反
    在这里插入图片描述
  • \s匹配所有空白字符(包括换行符、制表符、空格(\f\r\n\t\v))
    c后面后换行符
    在这里插入图片描述
  • []只表示匹配一个字符,不带[]表示原来的意思
  • 在这里插入图片描述
  • \b 匹配单词的边界(单词的边界可以认为是两个字母之间有分隔)
    在这里插入图片描述
  • \后面加大写字母取反义

在这里插入图片描述

  • \d相当于[0-9] \D相当于匹配非[0-9]
  • \w相当于匹配[a-zA-Z0-9]和中文,\W匹配除\w字符
    在这里插入图片描述
    在这里插入图片描述
转义

凡是在正则表达式中有特殊意义的符号,如果想使用它的本意,需要转义,反斜杠自身,需要使用\
\r和\n转义后还是代表回车、换行

重复
代码说明举例
*表示前面的正则表达式会重复出现0次或多次e\w*单词中e后面可以有非空白字符
+表示前面的正则表达式重复至少1次e\w单词后面至少有一个非空白字符
表示前面的正则表达式会重复0次或1次e\w?单词中e后面至多有一个非空白字符
{n}重复固定的n次e\w{1} 单词中e后面只能有一个非空白字符
{n,}重复至少n次e\w{1,}等价于e\w+,e\w{0,}等价e\w*,e\w{0,1}等价e\w?
{n,m}重复n到m次e\w{1,10}单词中e后面至少1个,至多10个非空白字符
代码说明举例
xy匹配x或者y
捕获
(pattern)使用小括号指定一个子表达式,也叫分组捕获后会自动分配组号从1开始可以改变优先级

组号默认从1开始,分组0指的是匹配分组
在这里插入图片描述

(?:pattern)如果仅仅为了改变优先级,就不需要捕获分组(?:w | f)ood ‘industr(?:y | ies)等价于’industry | industries’

在这里插入图片描述

\数字匹配对应的分组

后面的\1代表复制group1的游戏
在这里插入图片描述
将\1变为\2后
在这里插入图片描述
|(?:exp)

(?'name’exp)命名分组捕获,但是可以通过name访问分组,Python语法必须是(?Pexp)

将分组进行命名

在这里插入图片描述

零宽断言
(?=exp)零宽度正预测先行断言,断言exp一定在匹配的右边出席那,也就是说断言后面一定跟个exp

在这里插入图片描述

(?<=exp)零宽度正回顾后发断言,断言exp一定出席那在匹配的左边出现,也就是前面一定有个exp前缀

在这里插入图片描述

负向零宽断言
(?!exp)零宽度负预测先行断言,断言exp一定不会出现在右侧,也就说断言后面一定不是exp

在这里插入图片描述
|(?<!exp) |零宽度负回顾后发断言,断言exp一定不能出现在左侧,也就是说断言前面一定不能是exp |
在这里插入图片描述
注意:
断言会不会i捕获呢?也就是断言占不占分组符
断言不沾分组号,断言部分不会出现在分组中
分组和捕获是同一个意思
使用正则表达式时,能用简单表达式,就不要复杂的表达式

贪婪与非贪婪

默认是贪婪模式,也就是说尽量多匹配更长的字符串
非贪婪很简单,在重复的符号后面加一个?问号,就尽可能的少匹配了

代码说明
*?匹配任意次,但尽可能少重复
+?匹配至少1次,但尽可能少重复
??匹配0次或1次,但尽可能少重复
{n,}?匹配至少n次,但尽可能少重复
{n,m}匹配至少n次,至多m次,但尽可能少重复
  • *? 非贪婪不匹配次数
    在这里插入图片描述
  • +?非贪婪只匹配一次

在这里插入图片描述

  • ??非贪婪不匹配次数
    在这里插入图片描述
引用引擎选项
代码说明python
IgnoreCase匹配时忽略大小写re.l或re.IGNORECASE
Singleline单行模式,可以匹配所有字符,包括\nre,S或re,DOTALL
Multiline多行模式^行首、$行尾re.M或re,MULTILINE
IgnorePatternWhitespace忽略表达式中的空白字符,如果要使用空白字符用转义,#可以用来做注释re,X或re.VERBOSE

单行模式:

  • .可以匹配所有字符,包括换行符
  • ^表示整个字符串的开头,$整个字符串的结尾

多行模式

  • .可以匹配除了换行符之外的字符,多行不影响.
  • ^表示行首,$行尾,只不过这里的行是每一个行

默认模式:可以看作待匹配的文本是一行,不能看作多行,,点号不能匹配换行符,^和 表 示 行 首 和 行 尾 , 而 行 首 行 尾 就 是 整 个 字 符 串 的 开 头 和 结 尾 单 行 模 式 : 基 本 和 默 认 模 式 一 样 , 只 是 . 点 号 终 于 可 以 匹 配 任 意 一 个 字 符 包 括 换 行 符 , 这 是 所 有 文 本 就 是 一 个 长 长 的 只 有 一 行 的 字 符 串 , 就 是 这 一 行 字 符 串 的 行 首 , 表示行首和行尾,而行首行尾就是整个字符串的开头和结尾 单行模式:基本和默认模式一样,只是.点号终于可以匹配任意一个字符包括换行符,这是所有文本就是一个长长的只有一行的字符串,^就是这一行字符串的行首, .就是这一行的行尾
多行模式:重新定义了行的概念,但不影响,点号的行为,^和$还是行首行尾的意思,只不过因为多行模式可以识别换行符了,开始指的是\n后紧接着下一个字符,结束指的是\n前的字符,注意最后一行结尾可以没有\n
简单讲,单行模式之影响,行为,多行模式重新定义行印象^和 $
默认模式下.功能照旧
在这里插入图片描述
单行模式下增强.的功能,所有都可匹配
在这里插入图片描述
多行下照旧
在这里插入图片描述
多行模式和单行模式都选择情况下,增强,的功能
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值