从常用实例学习正则1

本章内容

常用正则表达式整理、正则表达式模块整理、Python中re正则模块函数功能整理。

常用正则表达式整理

表达式说明正则表达式
中文[\u4e00-\u9fa5]+
QQ号码[1-9]\d{5,10}
邮箱地址\w+(?:[-+.]\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*
IP地址(泛型匹配)\d+\.\d+\.\d+\.\d+
IP地址(精确匹配)(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\d*?
手机号(?:13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}
URL网址https?://[\w]+(?:[./][\w]+)*
HTML代码中的SRC属性.*[sS][rR][cC] *= *[\'"](.*?)[\'"].*
HTML代码中的URL网址.*(?:[sS][rR][cC]|[hH][rR][eE][fF]) *= *[\'"](https?://[\w]+(?:[./][\w]+)*)[\'"].*
身份证15位匹配[1-9]\d{5}\d{2}(?:0[1-9]|(?:10|11|12))(?:[0-2][1-9]|10|20|30|31)\d{2}[0-9Xx]
身份证18位匹配[1-9]\d{5}(?:18|19|[23]\d)\d{2}(?:0[1-9]|(?:10|11|12))(?:[0-2][1-9]|10|20|30|31)\d{3}[0-9Xx]

正则表达式模块整理

一般字符

字符描述
.(英文的点)匹配任意除换行符\n之外的符号
\转义字符,使后一个字符改变原来的意思
[…]字符集,匹配当中范围内的单个字符(使用 - 代表连续的字符ascii码范围,如a-h代表abcdefgh,常用的有0-9a-zA-Z),
如果第一个字符是^ ,则字符集取反(例如:[^a-z]为所有非小写字母字符),匹配结果为 字符而不是所有的字符组合

非打印字符

字符描述
\cx匹配由x指明的控制字符,x的值必须为A-Za-z之一,否则将c视为原义的 'c’字符(例:\cM匹配Control-M或回车符)
\f相当于\x0c\cL,匹配换页符
\n相当于\x0a\cJ,匹配换行符
\r相当于\x0d\cM,匹配回车符
\t相当于\x09\cI,匹配水平制表符
\v相当于\x0b\cK,匹配垂直制表符

预定义字符集

字符描述
\d相当于[0-9],包括了所有数字字符
\D相当于[^\d][^0-9],包括了所有非数字字符
\s相当于[ \t\r\n\f\v],包括了所有空白字符
\S相当于[^ \t\r\n\f\v],包括了所有非空白字符
\w相当于[0-9A-Za-z_],包括了所有单词字符(数字、大小写字母、下划线)
\W相当于[^0-9A-Za-z_],包括了所有非单词字符

数量词

字符描述
{m}匹配前一个字符m次
{m,n}m和n最多一个可省略;省略m则{,n}相当于{0,n}匹配前一个字符0-n次;省略n则{m,}匹配前一个字符至少m次,最多无限次
?相当于{0,1},匹配前一个字符0-1次
*相当于{0,},匹配前一个字符0-n次
+相当于{1,},匹配前一个字符至少1次,最多无限次

边界匹配字符

字符描述
^匹配字符串的开头(多行模式匹配每一行开头,在[^...]中仅表示 的含义)
$匹配字符串的末尾(多行模式匹配每一行末尾)
\A仅匹配字符串开头
\Z仅匹配字符串结尾
\b匹配单词边界(字与空格之间的位置)
\B相当于[^\b],匹配非单词边界

逻辑字符和分组字符

字符描述
|相当于or可多个想组,优先尝试左边表达式,如果左边匹配失败,则匹配右边,否则跳过,如果没有 (…),则范围是整个表达式
(…)分组表示,从左到右遇 ‘(’ 则编号 +1 (第1组编号为1) ,分组作为整体,后面可接数量词,分组内的表达式 | 会被限制在分组内
(?P<name>)给定分组除了编号以外的额外别名
\<number>引用编号为 <number> 的分组匹配到的字符串
(?P=name)引用别名为 name 的分组匹配到的字符串

不作为分组的情况

字符描述
(?..)不分组版本,用于使用 **’
(?#…)此分组用来注释,会被忽略
(?aiLmsux)此分组设置匹配模式,每个字母代表一个匹配模式,仅在表达式字符串首位表示,详情见下方内容
(?=…)之后的字符串内容需要匹配表达式才能成功匹配,不消耗字符串内容(例:a(?=\d)代表后面是数字)
(?!..)之后的字符串内容需要不匹配表达式才能成功匹配,不消耗字符串内容(例:a(?!\d)代表后面不是数字)
(?<=…)之前的字符串内容需要匹配表达式才能成功匹配,不消耗字符串内容(例:a(?<=\d)代表前面是数字)
(?<!..)之前的字符串内容需要不匹配表达式才能成功匹配,不消耗字符串内容(例:a(?<!\d)代表前面不是数字)
(?(id/name)
yes-patterm|no-pattern)
如果编号为id或别名为name的组匹配到字符,则需要匹配yes-pattern,否则需要匹配no-pattern(可以省略)

部分数量词的贪婪模式与非贪婪模式

前提:整个表达式匹配成功。
区别:贪婪模式将尽可能的多匹配,非贪婪模式将尽可能的少匹配。

贪婪模式量词非贪婪模式量词
{m,n}{m,n}?
{m,}{m,}?
???
**?
++?

Python中re正则模块函数功能整理

正则匹配模式种类

匹配模式模式全称解释详细解释或备注
re.Are.ASCII只匹配ASCII字符Python3的默认字符串已经是UNICODE
re.Ire.IGNORECASE忽略大小写表达式如[A-Z]也会匹配小写字符
re.Lre.LOCALE语言依赖只能对byte样式、8位字节有效,且不能和re.ASCII一起使用
re.Mre.MULTILINE多行模式^$仅匹配每行开头与每行结尾
re.Sre.DOTALL.(英文的点)匹配全部字符
re.Ure.UNICODEUnicode匹配Python3的默认字符串已经是UNICODE
re.Xre.VERBOSE冗长模式允许分段和添加注释(每行#后为注释),空白除非字符集或转义,否则忽略

正则对象种类

种类描述支持方法拥有属性
<class 're.Pattern'>正则表达式对象searchmatchfullmatchsplitfindallfinditersubsubnflagsgroupsgroupindexpattern
<class 're.Match'>匹配对象expandgroup(可以用下标取值)、groupsgroupdictstartendspanposendposlastindexlastgrouprestring
<class 'callable_iterator'>可迭代对象NoneNone

统一参数种类

种类描述
pattern正则表达式对象
string待处理字符串
repl可以是字符串或callback对象,如果是字符串则将正则匹配到的字符串替换成字符串,否则由只接收匹配对象一个参数处理匹配到的字符串
maxsplit最大分隔次数
count最大替换次数
flag正则匹配标记
default不参与匹配的组合的默认值
__group匹配结果的组的序号,可以是一个整数或一个整数列表

正则函数功能

  • re.compile(pattern, flags=0)
    • 生成一个正则表达式对象
    • 返回对象:<class 're.Pattern'>
  • re.search(pattern, string, flags=0)
    • 扫描整个字符串找到匹配的第一个位置并返回匹配对象,没有匹配则返回None
    • 返回对象:<class 're.Match'>
  • re.match(pattern, string, flags=0)
    • 从字符串的起始位置匹配(可以不到末尾),在多行模式下只匹配开始位置而不是每行开始,没有匹配则返回None
    • 返回对象:<class 're.Match'>
  • re.fullmatch(pattern, string, flags=0)
    • 整个字符串完整的匹配到正则表达式样式则返回匹配对象,没有匹配则返回None
    • 返回对象:<class 're.Match'>
  • re.split(pattern, string, maxsplit=0, flags=0)
    • 将正则表达式匹配到的所有对象分隔开来,剩下的字符全部返回到列表最后一个元素
    • 返回对象:<class 'list'>
  • re.findall(pattern, string, flags=0)
    • 返回一个不重复的按从左到右顺序返回的匹配列表,如果存在至少一个组,则返回一个组合列表,空匹配不会自动消除
    • 返回对象:<class 'list'>
  • re.finditer(pattern, string, flags=0)
    • 返回一个不重复的按从左到右顺序返回的迭代器对象,里面保存了匹配对象,空匹配不会自动消除
    • 返回对象:<class 'callable_iterator'>
  • re.sub(pattern, repl, string, count=0, flags=0)
    • 使用repl替换字符串最左边正则表达式匹配集合获得的字符串,如果没有匹配结果则不对字符串操作
    • 返回对象:<class 'str'>
    • repl是callback对象时,只接收一个参数且参数类型为<class 're.Match'>
  • re.subn(pattern, repl, string, count=0, flags=0)
    • 行为与 sub() 相同,但是返回一个元组 (字符串, 替换次数)
    • 返回对象:<class 'tuple'>
    • replcallback 对象时,只接收一个参数且参数类型为<class 're.Match'>
  • re.escape(pattern)
    • 转义 pattern 中的特殊字符
    • 返回对象:<class 'str'>
  • re.purge()
    • 清除正则表达式缓存

正则表达式属性解释

属性描述
flags正则匹配标记
groups捕获组合的数量
groupindex映射由 (?P) 定义的命名符号组合和数字组合的字典
pattern编译对象的原始样式字符串

匹配对象函数功能

  • re.Match.group(__group)
    • 返回一个或者多个匹配的子组
  • re.Match.groups(default)
    • 返回一个元组,包含所有匹配的子组,在样式中出现的从1到任意多的组合
  • re.Match.groupdict(default)
    • 返回一个字典,包含了所有的有元组别名的子组
  • re.Match.start(__group)
    • 返回组匹配到的字串的开始标号
  • re.Match.end(__group)
    • 返回组匹配到的字串的结束标号
  • re.Match.span(__group)
    • 返回一个匹配区间二元组 (re.Match.start(__group), re.Match.end(__group))

匹配对象属性解释

属性描述
pos正则引擎开始在字符串搜索一个匹配的索引位置
endpos正则引擎停止在字符串搜索一个匹配的索引位置
lastindex捕获组的最后一个匹配的整数索引值
lastgroup最后一个匹配的命名组名字
re返回产生这个实例的正则对象
string待处理字符串

结束语

这章理论较多,下一章就是练习了~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值