python学习-08【正则表达式】

1、正则表达式的基本语法

普通字符

1、判断一个长度为 1 的字符串是否为数字。

[] 表示这是一个字符组,表示匹配包含的任意一个字符

[0123456789]
2、如果 [] 中的字符是连续的,就可以使用 - 省略中间的字符。

[0-9][a-z][A-Z]
3、判断长度为 2 的字符串包含的是否是数字,可以使用==两个 []==进行判断

[0-9][0-9]
4、匹配包括所有英文大小写

[a-zA-Z][A-Za-z]

元字符

元字符是正则表达式中有特殊含义的字符

元字符 说明
. 匹配除换行符以外的任意字符
\ 转义字符,可以解除特殊字符的特殊功能
^ 匹配字符串开始的位置
$ 匹配字符串结束的位置
* 匹配前面的字符 0 次或多次
+ 匹配前面的字符 1 次或多次
? 匹配前面的字符 0 次或 1 次
{n} 匹配前面的字符 n 次
{n.} 匹配前面的字符至少 n 次
{n,m} 匹配前面的字符至少 n 次,至多 m 次
`x y`
[xyz] 匹配 xyz 中任意一个字符
[^xyz] 不匹配 xyz 中的字符
[^m-z] 匹配未在指定范围 m 到 z 中的任何字符
\A 只匹配字符串的开头
\B 匹配非单词边界
\b 匹配某个单词边界
\D 匹配非数字字符
\d 匹配数字字符
\f 匹配换页字符
\n 匹配换行符
\r 匹配回车字符
\S 匹配任何非空白字符
\s 匹配任何空白字符,包括空格、制表符等
\W 匹配任何非单词字符
\w 匹配任何单词字符,包括数字和下划线
\Z 只匹配字符串结尾或结尾的换行符之前
\z 只匹配字符串的结尾
  • 默认情况下,^\A 的功能相同,$\Z 的功能相同,但是如果设置了 re.MUKTILINE 的标志,^$ 还可以匹配换行符的位置,而两外两个不可以。
  • 除此之外,() 可以起到分组作用,() 中包含的是正则表达式的子表达式
转义字符

1、匹配一个 IP 地址:

[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{3}\.[0-9]{1,3}
2、如果想要匹配 \,则需要使用 \\

简化:在字符串左侧加上 r 前缀

限定符

限定数量的字符,用来限定一个目标表达式要重复出现几次才会匹配成功

即上表中的 *、+、?、{n}、{n,}、{n,m}......

e.g.:获取 9 位QQ号:^\d{9}$

定位符

表示字符串或某个单词的边界

即上表中的 ^、$、\B、\b

2、正则表达式和 re 模块

在使用 re 模块前,需要通过 import 引入:import re

compile 方法

如果重复使用某个正则表达式,,可以使用 compile() 方法将正则表达式编译成 Pattern 对象
re.compile(pattern[,flag])

  • pattern:字符串形式的正则表达式
  • flag:可选参数,表示匹配模式
    • re.I ( re.IGNORECASE ):忽略大小写匹配
    • re.M ( re.MULTILINE ):多行模式
    • re.S ( re.DOTALL ):点(.) 任意匹配模式,会改变 . 的匹配方式,可以匹配任意字符
    • re.X ( re.VERBOSE ):详细模式,该模式下的正则表达式可以是多行的,也可以添加注释,空白符号会被忽略。

re.compile() 方法返回一个正则表达式的对象

python 复制代码
import re
pattern = re.compile(r"""\d+ # 匹配数字整数部分
. # 匹配数字小数点
\d* #匹配数字小数部分""", re.X)
match 方法

match 方法只对字符串匹配一次,只要在起始位置匹配到一个符合要求的字符就会返回值,并不会返回所有符合的结果
match(pattern, string, flags)

  • pattern:字符串形式的正则表达式
  • string:要匹配的字符串
  • flags:可选参数,表示匹配模式

search() 方法的语法格式与 match() 方法相同

search() 方法不仅在字符串的起始位置进行搜索匹配,也会在符合条件的其他位置进行匹配

findall 方法

用于在整个字符串中搜索所有符合正则表达式的字符串

匹配成功的结果以列表的形式返回

基本语法与 match() 方法相同

sub 方法

可以使用正则表达式替换字符串
sub(pattern, rep1, string, count, flags)

  • pattern:字符串形式的正则表达式
  • rep1:用来替换的字符串
  • string:表示原始字符串
  • count:可选参数,表示模式匹配后替换的最大次数(默认值为 0 表示替换所有匹配到的字符串)
  • flags:可选参数,标志位,用于控制匹配方式
split 方法

通过正则表达式分割字符串,并以列表的形式返回
split(pattern, string, maxsplit, flags)

  • pattern:字符串形式的正则表达式
  • string:表示原始字符串
  • maxsplit:可选参数,表示最大的拆分次数
  • flags:可选参数,标志位,用于控制匹配方式

e.g.:分隔 URL 的 /:

python 复制代码
import re
pattern = r'[\/]+'
url = 'https://docs.python.org/zh-cn/3'
rules = re.split(pattern, url)
print(rules)

3、正则表达式拓展

贪婪匹配和非贪婪匹配

使用 group() 和 groups() 方法获取分组的内容。

group(N) 用于返回第 N 组括号匹配的字符

groups() 用于返回所有括号匹配的字符,并以元组形式返回
贪婪匹配指限定符尽可能多地匹配字符串,正则表达式默认情况下启用贪婪匹配。
非贪婪匹配则相反,在限定符后买你加上 ? 表示非贪婪匹配。

常用的正则表达式
  • 匹配首空白字符:^\s|\s$
  • 匹配日期格式:^\d{4}-\d{1,2}-\d{1,2}$
  • 匹配有效的月份:^(0?[1-9]|1[0-2])$
  • 匹配有效的日期:^(0?[1-9]|((1|2)[0-9])|30|31)$
  • 匹配固定电话号码:^(\d{3,4}-)?\d{7,8}$
  • 匹配身份证号码:^((\d{18})|([0-9x]{18})|([0-9X]{18}))$
  • 匹配 URL:^(https:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([\/\w .-])\/?$
  • 匹配用户名:^[a-zA-Z][a-zA-Z0-9_]{4,15}
  • ......
相关推荐
flying jiang1 小时前
在Python中快速获取HTML中<span>标签的内容
开发语言·python
寂然如故3 小时前
Anaconda 安装
python
zhangbin_2373 小时前
【Python机器学习】NLP信息提取——命名实体与关系
开发语言·人工智能·python·深度学习·机器学习·自然语言处理
985小水博一枚呀4 小时前
【梯度消失|梯度爆炸】Vanishing Gradient|Exploding Gradient——为什么我的卷积神经网络会不好呢?
人工智能·python·深度学习·神经网络·计算机视觉·cnn·numpy
全能全知者5 小时前
不废话简单易懂的Selenium 页面操作与切换
python·selenium·测试工具·网络爬虫
handsome2135 小时前
WSL中使用GPU加速AMBER MD--测试
笔记·学习
WZF-Sang6 小时前
Linux权限理解【Shell的理解】【linux权限的概念、管理、切换】【粘滞位理解】
linux·运维·服务器·开发语言·学习
狂飙的张兴发6 小时前
认知小文2《成功之路:习惯、学习与实践》
学习·考研·职场和发展·跳槽·学习方法·改行学it·高考
你可以自己看6 小时前
python的基础语法
开发语言·python
爱编程的小新☆7 小时前
C语言内存函数
c语言·开发语言·学习