Python学习之Part24.正则表达式基础

1.正则表达式介绍

 正则表达式是用来匹配字符串内容的一种规则,许多程序设计语言都支持利用正则表达式进行字符串操作,例如python中的re模块就是正则模块,此模块中的方法可以支持正则表达式的使用,正则表达式常用于处理文本信息,本文记录一些正则表达式的基础知识。
 介绍一个正则表达式在线测试的网页:正则表达式在线测试

2.字符组

介绍: 在同一位置上可能出现的各种字符组成了一个字符组,在正则表达式中用 [] 表示
   字符可以是很多类型,如字母、数字、标点等

用法:[所需要匹配字符] – 从左到右,范围应从小到大

示例:

字符组含义
[abcdef]匹配字符 abcdef
[0-9]匹配 0~9 的数字
[a-z]匹配 a~z 的字母
[a\-z]匹配字母 a 或 z 或符号 -
[a-zA-Z0-9]匹配小写字母 a~ z,大写字母A~Z,数字0~9,即所有的字母和数字
[A-z]可以匹配上所有的大小写字母和一些特殊符号

说明:
1). 由于在正则表达式中,’ - ’ 是关键字符,所以在我们需要匹配时,要使用 ‘ \ ’ 进行转义;
2). 当我们使用 [A-z] 这样的规则时,匹配到的不只是字母a~Z,由于在ASCII码中,A~z中间还有几个字符,所以若待匹配字符串中有相应的字符也会被匹配上;
举例如下:
在这里插入图片描述

3.元字符

介绍: 元字符是在使用正则表达式时一些既定的匹配规则

示例:

元字符匹配规则
.匹配除了换行符以外的任意字符
\w匹配 数字、字母、下划线(word)
\d匹配 数字 (digit)
\s匹配 任意的空白符(space)
\n匹配 一个换行符
\t匹配 一个制表符
\b匹配 一个单词的结尾
^匹配 字符串的开始 (最常用)
$匹配 字符串的结尾 (最常用)
\W匹配 非数字、字母、下划线(word)
\S匹配 非任意的空白符
\D匹配 非数字
a|b匹配 字符a或者字符b
()匹配 括号内的表达式,也表示一个组
[ ]匹配 字符组中的字符
[^ ]匹配 除了字符组中字符的所有字符,此时^表示 非 的意思,不是匹配开始的意思

说明:
1). \s 匹配所有的空白符,包括空格,制表符,换行符;
2). \b 匹配单词的结尾,’.\b’ 就匹配所有单词的结尾,并注意,换行符也被当作一个独立的单词对待;
3). ^$ 匹配空;
4). () 写在一个小括号内的正则表达式是一个分组;
5). 使用逻辑或,即:| 时,往往从左到右依次匹配,若能匹配上左边的,就不再匹配右边的。

4.数量限制

介绍: 上面的匹配都是匹配单个字符,如果我们需要匹配多个字符或一个句子,就需要使用量词来约束匹配条件。
示例:

关键字含义
*重复 零次或更多次
+重复 一次或更多次
?重复 零次或一次
{n}重复 n次
{n, }重复 n次及以上
{n, m}重复 n到m次

说明:
1). 数量限制必须跟在匹配规则的后边,且这个限制只约束紧跟它前边的那个规则
2). 当说到重复 0 次时,就是当没有时也能匹配上,甚至换行符也能匹配上,0 跟 空 果然无论如何都是个很抽象的概念;

特别注意:
 需要特别注意的是,前边的 *,+,{},? 等都是贪婪匹配,即尽可能多的去匹配,但是 匹配的数量限制后加 ?,就变成了非贪婪匹配,即:惰性匹配
 例如:{1,2} 是按照数量限制为2进行匹配,
      {1,2}? 是按照数量限制为1进行匹配
举例:
当我们使用 .* 进行匹配时,在无任何文本信息的情况下,就已经能匹配到一个结果了:
在这里插入图片描述
贪婪匹配 & 非贪婪匹配:
1). <.*> 匹配是从左向右匹配,先匹配到 < 再匹配任意字符一直向后匹配,直到匹配到不能匹配的时候,再看往右匹配条件还有 > 字符,则又向前回溯,找到第一个 > 字符时,本次匹配结束。
2). <.*?> 先匹配到 < 再匹配任意字符一直向后匹配,找到第一个 > 字符时则本次匹配结束.
在这里插入图片描述
在这里插入图片描述

5.分组

介绍: 需要进行整体约束的规则,用()括起来
举例: 身份证匹配
要求:
输入字符串为长度15或18:
 为15时:全部由数字组成,首位不能为0;
 为18时:首位不能为0,前17位是数字,末尾可能是数字或x
两种匹配规则:

^[1-9](\d{16}(x|\d))?$|^[1-9]\d{14}$
^[1-9]\d{14}(\d{2}[0-9x])?$

注意: 使用逻辑 | 时,应先将长的规则写在 | 的左边,否则匹配到短的字符就不会再向后匹配就会得到错误的结果。

6.转义符

介绍: 转义符:\ 用来对关键字进行转义;
    当我们需要匹配例如 \b \w 等的元字符时,就需要先将匹配规则转义再进行匹配;
例如:
在这里插入图片描述

7. [ .*? ] 的用法

此表达式用于:取尽量少的任意字符,
例如:.*?x – 取前边任意长的字符,直到第一个x出现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值