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
posted @ 2023-02-26 00:16  槑孒  阅读(143)  评论(0编辑  收藏  举报