python操作re正则表达式的精简总结

正则介绍和知识点

用来简洁表达一组字符串的表达式。

编译:将符合正则表达式语法的字符串转换成正则表达式特征

正则表达式语法由字符和操作符构成

re库是Python的标准库 用import re调用

r'text\f\sdfs[{?' 用此方法来转义字符串

Match对象是一次匹配的结果,包含匹配的很多信息

Re库默认采用贪婪匹配,即输出匹配最长的子串

贪婪匹配和最小匹配 如 r'PY.*N'r'PY.*?N' 。用?

只要长度输出可能不同的,都可以通过在操作符后增加?变成最小匹配

常用的操作符

操作符

.                表示任何单个字符
[]               字符集,对单个字符给出取值范围  
[^ ]             非字符集,对单个字符给出排除范围
*                前一个字符0次或无限次扩展
+                前一个字符1次或无限次扩展
?                前一个字符0次或1次扩展
|                左右表达式任意一个
{m}              扩展前一个字符m次
{m,n}            扩展前一个字符m至n次(含n)
^                匹配字符串开头
$                匹配字符串结尾  
( )              分组标记,内部只能使用 | 操作符
\d               数字,等价于[0‐9]
\w               单词字符,等价于[A‐Za‐z0‐9_]

经典实例

^[A-Za-z]+$                    26个字母组成的字符串
^[A‐Za‐z0‐9]+$                 26个字母和数字组成的字符串
^‐?\d+$                        整数形式的字符串
^[0‐9]*[1‐9][0‐9]*$            正整数形式的字符串
[1‐9]\d{5}                     境内邮政编码6位  
[\u4e00‐\u9fa5]                匹配中文字符

Re库主要功能函数

功能函数

re.search()   在字符串中搜索匹配正则表达式第一个位置,返回match对象
re.match()    从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall()  搜索字符串,以列表类型返回全部能匹配的子串
re.splite()   将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象 
re.sub()      在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

字符串匹配

import re
s = re.search(r'[1-9]\d{5}','BITfs 1000894654')  #匹配后6位数字
if s:
    print(s.group(0))

ls = re.findall(r'[1-9]\d{5}','fsfsd100081 fsdfs100084')   #以列表的形式匹配
print(ls)

spt = re.split(r'[1-9]\d{5}','fsfs100088 sfsdf100099')     #分割字符串
print(spt)
spt_max = re.split(r'[1-9]\d{5}','fsfs100088 sfsdf100099 vxc5464654',maxsplit=1)   #最大分割数
print(spt_max)

for m in re.finditer(r'[1-9]\d{5}','fdsgdf5646165 vxcvx3113213 ewrer4461313'):     #迭代
    if m:
        print(m.group(0))

sb = re.sub(r'[1-9]\d{5}',':zipcode','fdsgdf5646165 vxcvx3113213')   #替换字符串
print(sb)

运行后
在这里插入图片描述
正则的等价用法:

import re
rst = re.search(r'[1-9]\d{5}','fsdf5465465')
if rst:
    print(rst.group(0))
    
print('-'*50)   
#re 库的另一种等价用法
#面向对象用法
pat = re.compile(r'[1-9]\d{5}')   
rst = pat.search('fsdf5465465')  #pat.xxx(string)  string表示待匹配的字符串
if rst:
    print(rst.group(0))

在这里插入图片描述

参数

re.search(pattern, string, flags=0)
re.match(pattern, string, flags=0)
re.findall(pattern, string, flags=0)
re.split(pattern, string, maxsplit=0, flags=0)
re.finditer(pattern, string, flags=0)
re.sub(pattern, repl, string, count=0, flags=0)
regex = re.compile(pattern, flags=0)

pattern : 正则表达式的字符串或原生字符串表示
string :  待匹配字符串
flags :   正则表达式使用时的控制标记
repl :    替换匹配字符串的字符串
count :   匹配的最大替换次数
maxsplit: 最大分割数,剩余部分作为最后一个元素输出

match对象

属性

.string      待匹配的文本
.re          匹配时使用的patter对象(正则表达式)
.pos         正则表达式搜索文本的开始位置
.endpos      正则表达式搜索文本的结束位置

方法

.group(0)    获得匹配后的字符串
.start()     匹配字符串在原始字符串的开始位置
.end()       匹配字符串在原始字符串的结束位置
.span()      返回(.start(), .end())

最小匹配操作符

*?    前一个字符0次或无限次扩展,最小匹配
+?    前一个字符1次或无限次扩展,最小匹配
??   前一个字符0次或1次扩展,最小匹配
{m,n}  扩展前一个字符m至n次(含n),最小匹配

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值