Python---re模块(正则表达式)

1.1、正则表达式所知,简单了解正则匹配
\d:表示一个数字字符
\d{3}:匹配此模式3次
1.2 Regex对象

python 复制代码
import re
demo=re.compile(r'\d\d\d-\d\d')
#re.compile()传入一个字符串,返回一个Regex对象,正则表达式
mo=demo.search('my num is:345-12')
#search()传入字符串,返回一个Match对象,不匹配返回None
print("my num is:"+mo.group())
#Match对象有group()分组,默认参数为0,返回第一个分组
#输出结果my num is:345-12

1.3用正则表达式匹配更多模式

注:要匹配特殊字符,在其前面加转义符\

分组

使用()来进行分组

python 复制代码
import re
demo=re.compile(r'(\d\d\d)-(\d\d)')
mo=demo.search('my num is:345-12')
print("my first_num is:"+mo.group(0))
print("my second_num is:"+mo.group(1))
mo1,mo2=mo.groups()
#gruops()可输出全部
print(mo1)
print(mo2)

输出结果

python 复制代码
my first_num is:345-12
my second_num is:345
345
12

管道

管道符|

python 复制代码
import re
demo=re.compile(r'demo1|demo2')
#只能匹配其中一个即哪个先被发现,返回哪个,但有办法匹配使得group()可使用
mo=demo.search('demo1 and demo2')
print("my only_num is:"+mo.group())
#输出结果my only_num is:demo1
python 复制代码
import re
demo=re.compile(r'bat(demo1|demo2)')
mo=demo.search('batdemo2')
print("my only_num is:"+mo.group())
print(mo.group(1))
#可返回含固定前缀
#返回结果为
#my only_num is:batdemo2
#demo2

re.compile()修改匹配形式

(key)?:可选可不选(0次或1次)
*

(key)* :0次或多次
+

(key)+:一次或多次
{}

(key){number}:特定次数
1.4贪心和非贪心匹配

python 复制代码
import re
demo=re.compile(r'(ha){3-5}?')
#若没有?则会返回的结果为hahahahaha,默认为贪心,添加?非贪心匹配模式
mo=demo.search('hahahahahaha')
print("my string of finding is:"+mo.group())
#返回结果为my string is :hahaha

1.5 findall

Regex.findall()返回一个字符串列表(无分组),若有分组则为元组列表

python 复制代码
import re
demo=re.compile(r'\d\d\d-\d\d')
cheese=demo.findall('port:333-22   port1:444-34')
print(cheese)
#返回为['333-22', '444-34']

包含元组

python 复制代码
import re
demo=re.compile(r'(\d\d\d)-(\d\d)')
cheese=demo.findall('port:333-22   port1:444-34')
print(cheese)
#返回为[('333', '22'), ('444', '34')]
#每个元组代表一个字符串

1.6字符分类

字符 含义
\d 0-9的任意数字
\D 除\d以外的任何字符(以下大写均类似)
\w 任何字母、数字和下划线
\s 空格、制表符、换行符
[0-5] 匹配0-5其效果跟(0
[a-zA-Z] 字符类仅匹配字母

1.7定位符 ^ $

字符 含义
^ 文本开头
$ 文本结束

1.8通配符

字符 含义
.(句点) 匹配换行符以外的其它字符
.* 匹配任意文本除换行符
re.DOTALL 匹配换行符

.*默认为贪心模式,若要改为非贪心则可在其后加?如下.*?

python 复制代码
check=re.compile(r'.*',re.DOTALL)
#如此可匹配任意文本,包括换行符

1.9不区分大小写

re.I或re.IGNORECASE

python 复制代码
check=re.compile(r'hello',re.I)

1.10 sub() 替换字符串

python 复制代码
import re
demo=re.compile(r'agent (\w)\w*')
cheese=demo.sub(r'\1***','agent aice agent bob agent clic.')
#第一个参数为替换字符串,第二个字符串为原始字符串
print(cheese)
#输出结果为 a*** b*** c***.

1.11管理复杂的正则表达式

python 复制代码
import re

check = re.compile(r'''(          
                 (\d{3}|\(\d{3}\))?  # 可选部分:匹配3位数字或一个括号内的3位数字
                 C                   # 必须匹配字符'C'
                 (\d{3})             # 必须部分:匹配3位数字
)''', re.VERBOSE)
#re.VERBOSE 忽略正则表达式中空白符和注释

1.12组合使用re.IGNORECASE re.DOTALL re.VERBOSE

re.compile()第二个参数只能放一个,那么如何使用多个呢

python 复制代码
import re
check=re.compile(r'foo',re.IGNORECASE|re.DOTALL|re.VERBOSE)
相关推荐
码农阿豪2 分钟前
Python Flask应用中文件处理与异常处理的实践指南
开发语言·python·flask
xcLeigh3 分钟前
Python 项目实战:用 Flask 实现 MySQL 数据库增删改查 API
数据库·python·mysql·flask·教程·python3
威迪斯特3 分钟前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构
独好紫罗兰23 分钟前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
AIFarmer30 分钟前
在EV3上运行Python语言——无线编程
python·ev3
不会代码的小测试32 分钟前
UI自动化-POM封装
开发语言·python·selenium·自动化
2401_8414956434 分钟前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
ZH154558913144 分钟前
Flutter for OpenHarmony Python学习助手实战:GUI桌面应用开发的实现
python·学习·flutter
B站计算机毕业设计超人1 小时前
计算机毕业设计Hadoop+Spark+Hive招聘推荐系统 招聘大数据分析 大数据毕业设计(源码+文档+PPT+ 讲解)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
B站计算机毕业设计超人1 小时前
计算机毕业设计hadoop+spark+hive交通拥堵预测 交通流量预测 智慧城市交通大数据 交通客流量分析(源码+LW文档+PPT+讲解视频)
大数据·hive·hadoop·python·spark·毕业设计·课程设计