正则表达式及应用

正则表达式

具有特殊意义的专用字符''^"和''$''表示匹配(意思可以在里面找到)的开始和结束

元字符

元字符 描述说明 举例 结果
. 匹配任意字符(除\n) 'p\nytho\tn' p,y,t,h,o,\t,n
\w 匹配字母,数字,下划线 'python\n123' p,y,t,h,o,n,1,2,3
\W 匹配非字母,数字,下划线 'python\n123' \n
\s 匹配任意空白字符 'python\t123' \t
\S 匹配任意非空白字符 'python\t123' p,y,t,h,o,n,1,2,3
\d 匹配任意十进制数 'python\t123' 1,2,3

限定符(用于限定匹配的次数)

限定符 描述说明 举例 结果
匹配前面的字符0次或一次 colou?r 可以匹配color或colour
+ 匹配前面的字符1次或多次 colou+r 可以匹配colour或colouu......r
* 匹配前面的字符0次或多次 colou*r 可以匹配到color或colouu......r
{n} 匹配前面的字符n次 colou{2}r 可以匹配colouur
{n,} 匹配前面的字符最少n次 colou{2,}r 可以匹配colouur或colouuu......r
{n,m} 匹配前面的字符最小n次,最多m次 colou{2,4}r 可以匹配colouur或colouuur或colouuuur

其他字符

其他字符 描述说明 举例 结果
区间字符[ ] 匹配[ ]中所指定的字符 [.?!],[0-9] 匹配的标点符号为点,问号,感叹号,匹配0,1,2,3,4,5,6,7,8,9
排除字符^ 匹配不在[ ]中指定的字符 [尖括号(^)0-9] 匹配0,1,2,3,4,5,6,7,8,9
选择字符1(竖线) 用于匹配1左右的任意字符 \d{18}1\d{15} 匹配15或18位身份证
转义字符 同python中的转义字符 . .作为普通字符使用
[\u4e00-\u9fa5] 匹配任意一个汉字
分组() 改变限定符的作用 six1fourth和(six1four)th 匹配six或fourth和匹配sixth或fourth

re模块

函数 功能描述
re.match(pattern,string,flags=0) 用于从字符串的开始位置进行匹配,如果起始位置匹配成功,结果为Match对象,否则结果位None。
re.search(pattern,string,flags=0) 用于在整个字符串中搜索第一个匹配的值,如果匹配成功,结果为Match对象,否则结果位None。
re.findall(pattern,string,flags=0) 用于在整个字符串搜索所有符合正则表达式的值,结果是一个列表类型
re.sub(pattern,repl,string,count,flags=0) 用于实现对字符串中指定的子串的替换
re.split(pattern,string,maxsplit,flags=0 字符串中split()方法功能相同,都是分隔字符串
re.match
py 复制代码
import re#导入
pattern='\d\.\d+'#0-9 +是限定符,+  0-9出现一次或多次
s='I study Python 3.10 '#待匹配字符串
match=re.match(pattern,s,re.I)#re.I忽略大小写
print(match)#因为match是从头开始匹配的,匹配到第一个,显然不是,所以直接none
s2='3.10 Python I study it'
match2=re.match(pattern,s2,re.I)
print(match2)

print('匹配值的起始位置:',match2.start())
print('匹配值的结束位置:',match2.end())
print('匹配区间的位置元素:',match2.span())
print('待匹配的字符串::',match2.string)
print('匹配的数据:',match2.group())
输出结果:
None
<re.Match object; span=(0, 4), match='3.10'>
匹配值的起始位置: 0
匹配值的结束位置: 4
匹配区间的位置元素: (0, 4)
待匹配的字符串:: 3.10 Python I study it
匹配的数据: 3.10
re.search
py 复制代码
import re#导入
pattern='\d\.\d+'(#0-9 +是限定符,+  0-9出现一次或多次)这是规则pattern
s='I study Python 3.10 but i love 2.90 '#待匹配字符串
match=re.search(pattern,s,re.I)#re.I忽略大小写,search是在整个字符串中查找,找到第一个就直接输出,剩下的都不管
print(match)#如果没找到就输出none
print(match.group())

输出结果:
<re.Match object; span=(15, 19), match='3.10'>
3.10
re.findall
py 复制代码
import re#导入
pattern='\d\.\d+'#0-9 +是限定符,+  0-9出现一次或多次
s='I study Python 3.10 but i love 2.90 '#待匹配字符串
list=re.findall(pattern,s,re.I)#re.I忽略大小写,findall是在整个字符串中查找,找到所有的符合值,然后以列表的方式输出
print(list)
输出结果:
['3.10', '2.90']
re.sub
py 复制代码
import re#导入
pattern='唱|跳'
s='喜欢唱歌和跳舞'#待匹配字符串
new_s=re.sub(pattern,'?',s)#用问号代替一些不想出现的词汇
print(new_s)
输出结果:
喜欢?歌和?舞
re.split
py 复制代码
import re#导入
pattern='[#|?]'
s='https://i.csdn.net/#/user-center/profile?spm=1001.2014.3001.5516'#待匹配字符串
new_s=re.split(pattern,s)#分割
print(new_s)
输出结果:
['https://i.csdn.net/', '/user-center/profile', 'spm=1001.2014.3001.5516']

练习1:使用列表存储一些车牌号,然后用遍历和切片操作判断车牌的归属地

py 复制代码
car_number=['京123456','陕456789','津159753']
for item in car_number:
    car_address=item[0:1]
    print(item,'归属于地',car_address)
输出结果:
京123456 归属于地 京
陕456789 归属于地 陕
津159753 归属于地 津

练习2:统计字符串种字符出现的次数(不区分大小写)

py 复制代码
s='HelloPython,HelloWorld,helloEveryone'
s=s.lower()
a=input('请输入要统计的字符(不区分大小写):')
count=s.count(a)
print(f'字符"{a}"在字符串中出现的次数为:{count}')
输出结果:
请输入要统计的字符(不区分大小写):h
字符"h"在字符串中出现的次数为:4

练习3:给一个列表,格式化字符串

py 复制代码
lst=[
    ['01','洗衣机','美的',500],
    ['02','手机','我的',3000],
    ['01','电脑','他的',4500]
]
print('编号\t\t名称\t\t谁的\t\t价格')
for item in lst:
    for i in item:
        print(i,'\t\t',end='')
    print()
#格式化操作
print('编号\t\t名称\t\t谁的\t\t价格')
for item in lst:
    item[0]='0000'+item[0]
    item[3]='¥{0:.2f}'.format(item[3])
    for i in item:
        print(i,'\t\t',end='')
    print()
输出结果:
编号            名称            谁的            价格
01              洗衣机          美的            500 
02              手机            我的            3000
01              电脑            他的            4500
编号            名称            谁的            价格
000001          洗衣机          美的            ¥500.00
000002          手机            我的            ¥3000.00
000001          电脑            他的            ¥4500.00
相关推荐
ZhengEnCi7 小时前
Python字符串完全指南-从创建拼接到格式化的高效实践
python
junziruruo7 小时前
半监督学习,少样本学习和零样本学习
python·学习·机器学习
yunbao00_8 小时前
博客系统测试报告
python·功能测试·测试用例
长颈鹿仙女8 小时前
发送 Prompt 指令:请用一句话总结文本内容
python·深度学习·大模型
该用户已不存在8 小时前
构建现代应用的9个Python GUI库
前端·后端·python
Java中文社群8 小时前
用代码书写浪漫,网友直呼“太美了”!
python
@LetsTGBot搜索引擎机器人8 小时前
打造属于你的 Telegram 中文版:汉化方案 + @letstgbot 搜索引擎整合教程
开发语言·python·搜索引擎·机器人·.net
 梦晓天明10 小时前
12.集合介绍以及数组的使用选择
linux·开发语言·python
嵌入式-老费10 小时前
Easyx图形库应用(python+opencv的图形库开发)
开发语言·python·opencv