Python | 正则表达式(re模块)
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串
re模块是python独有的匹配字符串的模块,该模块种提供功能基于正则表达式实现的,对于字符串进行模糊匹配找到想要的内容信息,一般用于爬虫或者自动化测试前后端不分离项目
(很早就接触了,今天重温一下)
常用规则
字符 | 描述 |
---|---|
. | 匹配除换行符 \n 之外的任何单字符 |
+ | 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 + |
* | 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 * |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ? |
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。 |
^ | 匹配输入字符串的开始位置 |
$ | 匹配输入字符串的结束位置 |
\d | 匹配一个数字字符。等价于 [0-9]。 |
{n} |
n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。 |
运算字符优先级
字符 | 描述 |
---|---|
\ | 转义符 |
(), (?😃, (?=), [] | 圆括号和方括号 |
*, +, ?, {n}, {n,}, | 限定符 |
^, $, \任何元字符、任何字符 | 定位点和序列(即:位置和顺序) |
| | 替换,"或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。 |
Python中re模块主要功能是通过正则表达式是用来匹配处理字符串的
re模块的使用
使用前要导入re模块
import re
compile 函数
compile 函数用于编译正则表达式,生成一个 Pattern 对象,它的一般使用形式如下
re.compile(pattern,flag=0)
'''
pattern:正则模型
falgs :匹配模式,比如忽略大小写,多行模式等
返回值: Pattern 对象
'''
使用方法
compile
import re
# 将正则表达式编译成 Pattern 对象
pattern = re.compile(r'\d{5}')
接着就可以用pattern对象进行匹配了,需要跟findall(), search(), match()搭配使用
compile()与findall()一起使用
返回一个列表
import re
content = 'i li2222ke mus3333ic' #待匹配字符
pattern = re.compile("[a-zA-Z]+") #只匹配字母
result = pattern.findall(content) #匹配结果返回列表
print(result) #['i', 'li', 'ke', 'mus', 'ic']
compile()与match()一起使用
match()是从头开始匹配的 如果匹配不到就会返回None 并且匹配到一个就返回后面就不会匹配了
import re
content = 'i li2222ke mus3333ic'
pattern = re.compile("[a-zA-Z]+")#只匹配字母
result = pattern.match(content)
print(result) #<re.Match object; span=(0, 1), match='i'>
print(result.group()) #i
compile()与search()一起使用
和match()差不多,不同的就是可以不从0开始匹配,匹配一个结果就结束
import re
content = '1i li2222ke mus3333ic'
pattern = re.compile("[a-zA-Z]+")#只匹配字母
result = pattern.search(content) #匹配对应内容
print(result) #<re.Match object; span=(1, 2), match='i'>
print(result.group()) #i 如果用match开头不是字母这里会报错
split()函数
根据正则匹配分割字符串,返回分割后的一个列表
split(pattern, string, maxsplit=0, flags=0)
# pattern:正则模型
# string :要匹配的字符串
# maxsplit:指定分割个数
# flags :匹配模式
import re
content = 'i li5ke mu3s2ic'
result = re.split('\d',content) #根据数字切割
print(result) #['i li', 'ke mu', 's', 'ic']
sub()函数
替换匹配成功的指定位置字符串
sub(pattern, repl, string, count=0, flags=0)
# pattern:正则模型
# repl :要替换的字符串
# string :要匹配的字符串
# count :指定匹配个数
# flags :匹配模式
import re
content = 'i li5ke mu3s2ic'
result = re.sub('\d',"你好",content)
print(result) #i li你好ke mu你好s你好ic
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!