python的正则表达式怎么用
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章主要为大家展示了"python的正则表达式怎么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"python的正则表达式怎么用"这篇文章吧。一、正则
千家信息网最后更新 2024年11月24日python的正则表达式怎么用
这篇文章主要为大家展示了"python的正则表达式怎么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"python的正则表达式怎么用"这篇文章吧。
一、正则表达式-元字符
re 模块使 Python 语言拥有全部的正则表达式功能
1. 数量词
# 提取大小写字母混合的单词import rea = 'Excel 12345Word23456PPT12Lr'r = re.findall('[a-zA-Z]{3,5}',a)# 提取字母的数量3个到5个print(r)# ['Excel', 'Word', 'PPT']# 贪婪 与 非贪婪 【Python默认使用贪婪模式】# 贪婪:'[a-zA-Z]{3,5}'# 非贪婪:'[a-zA-Z]{3,5}?' 或 '[a-zA-Z]{3}'# 建议使用后者,不要使用?号,否则你会与下面的?号混淆# 匹配0次或无限多次 *号,*号前面的字符出现0次或无限次import rea = 'exce0excell3excel3'r = re.findall('excel*',a)r = re.findall('excel.*',a) # ['excell3excel3']# excel 没有l 有很多l都可以匹配出来print(r)# ['exce', 'excell', 'excel']# 匹配1次或者无限多次 +号,+号前面的字符至少出现1次import rea = 'exce0excell3excel3'r = re.findall('excel+',a)print(r)# ['excell', 'excel']# 匹配0次或1次 ?号,?号经常用来去重复import rea = 'exce0excell3excel3'r = re.findall('excel?',a)print(r)# ['exce', 'excel', 'excel']
2. 字符匹配
line = 'xyz,xcz.xfc.xdz,xaz,xez,xec'r = re.findall('x[de]z', line)# pattern 是x开始,z结束,含d或eprint(r)# ['xdz', 'xez']r = re.findall('x[^de]z', line)# pattern 是x开始,z结束,不是含d或eprint(r)# ['xyz', 'xcz', 'xaz']
# \w 可以提取中文,英文,数字和下划线,不能提取特殊字符import rea = 'Excel 12345Word\n23456_PPT12lr'r = re.findall('\w',a)print(r)# ['E', 'x', 'c', 'e', 'l', '1', '2', '3', '4', '5', 'W', 'o', 'r', 'd', '2', '3', '4', '5', '6', '_', 'P', 'P', 'T', '1', '2', 'l', 'r']# \W 提取特殊字符,空格 \n \timport rea = 'Excel 12345Word\n23456_PPT12lr'r = re.findall('\W',a)print(r)# [' ', '\n']
3. 边界匹配
# 限制电话号码的位置必需是8-11位才能提取import retel = '13811115888'r = re.findall('^\d{8,11}$',tel)print(r)# ['13811115888']
4. 组
# 将abc打成一个组,{2}指的是重复几次,匹配abcabcimport rea = 'abcabcabcxyzabcabcxyzabc'r = re.findall('(abc){2}',a) # 与# ['abc', 'abc']print(r)r = re.findall('(abc){3}',a)# ['abc']
5. 匹配模式参数
# findall第三参数 re.I忽略大小写import rea = 'abcFBIabcCIAabc'r = re.findall('fbi',a,re.I)print(r)# ['FBI']# 多个模式之间用 | 连接在一起import rea = 'abcFBI\nabcCIAabc'r = re.findall('fbi.{1}',a,re.I | re.S)# 匹配fbi然后匹配任意一个字符包括\nprint(r)# ['FBI\n']
二、方法
re.findall
匹配出字符串中所有 与制定值相关的值
以列表的形式返回
未匹配则返回空列表
import rere.findall(pattern, string, flags=0)pattern.findall(string[ , pos[ , endpos]])
import reline = "111aaabbb222小呼噜奥利奥"r = re.findall('[0-9]',line)print(r)# ['1', '1', '1', '2', '2', '2']
re.match
re.match 尝试从字符串的起始位置匹配一个模式
如果不是起始位置匹配成功的话,match()就返回none。
re.match(pattern, string, flags=0)# (标准,要匹配的,标志位)
print(re.match('www','www.xxxx.com'))print(re.match('www','www.xxxx.com').span())print(re.match('com','www.xxxx.com'))
(0, 3)None
group匹配对象
import rea = 'life is short,i use python,i love python'r = re.search('life(.*)python(.*)python',a)print(r.group(0)) # 完整正则匹配 ,life is short,i use python,i love pythonprint(r.group(1)) # 第1个分组之间的取值 is short,i use print(r.group(2)) # 第2个分组之间的取值 ,i love print(r.group(0,1,2)) # 以元组形式返回3个结果取值 ('life is short,i use python,i love python', ' is short,i use ', ',i love ')print(r.groups()) # 返回就是group(1)和group(2) (' is short,i use ', ',i love ')
import re# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串# re.M 多行匹配,影响 ^ 和 $# re.I 使匹配对大小写不敏感line = "Cats are smarter than dogs"matchObj1 = re.match(r'(.*) are (.*?) .*', line, re.M|re.I)matchObj2 = re.match(r'(.*) smarter (.*?) .*', line, re.M|re.I)matchObj3 = re.match(r'(.*) than (.*)', line, re.M|re.I)print(matchObj1)print(matchObj2)print(matchObj3)## # Noneif matchObj1: print ("matchObj1.group() : ", matchObj1.group()) print ("matchObj1.group(1) : ", matchObj1.group(1)) print ("matchObj1.group(2) : ", matchObj1.group(2))else: print ("No match!!")if matchObj2: print ("matchObj2.group() : ", matchObj2.group()) print ("matchObj2.group(1) : ", matchObj2.group(1)) print ("matchObj2.group(2) : ", matchObj2.group(2))else: print ("No match!!")if matchObj3: print ("matchObj3.group() : ", matchObj3.group()) print ("matchObj3.group(1) : ", matchObj3.group(1)) print ("matchObj3.group(2) : ", matchObj3.group(2))else: print ("No match!!")# matchObj1.group() : Cats are smarter than dogs# matchObj1.group(1) : Cats# matchObj1.group(2) : smarter# matchObj2.group() : Cats are smarter than dogs# matchObj2.group(1) : Cats are# matchObj2.group(2) : than# matchObj3.group() : Cats are smarter than dogs# matchObj3.group(1) : Cats are smarter# matchObj3.group(2) : dogs
import re# 点 是匹配单个字符# 星是前面的东西出现0次或无数次# 点星就是任意字符出现0次或无数次str = "a b a b"matchObj1 = re.match(r'a(.*)b', str, re.M|re.I)matchObj2 = re.match(r'a(.*?)b', str, re.M|re.I)print("matchObj1.group() : ", matchObj1.group())print("matchObj2.group() : ", matchObj2.group())# matchObj1.group() : a b a b# matchObj2.group() : a b
re.search
扫描整个字符串并返回第一个成功的匹配。
re.search(pattern, string, flags=0)
import reline = "cats are smarter than dogs"matchObj = re.match(r'dogs',line,re.M|re.I)matchObj1= re.search(r'dogs',line,re.M|re.I)matchObj2= re.match(r'(.*) dogs',line,re.M|re.I)if matchObj: print ("match --> matchObj.group() : ", matchObj.group())else: print ("No match!!")if matchObj1: print ("match --> matchObj1.group() : ", matchObj1.group())else: print ("No match!!")if matchObj2: print ("match --> matchObj2.group() : ", matchObj2.group())else: print ("No match!!")# No match!!# match --> matchObj1.group() : dogs# match --> matchObj2.group() : cats are smarter than dogs
re.compile
re.compile是将正则表达式转换为模式对象
这样可以更有效率匹配。使用compile转换一次之后,以后每次使用模式时就不用进行转换
三、检索和替换
re.sub 替换字符串
re.sub('被替换的','替换成的',a)
# 把FBI替换成BBQimport rea = 'abcFBIabcCIAabc'r = re.sub('FBI','BBQ',a)print(r)# 把FBI替换成BBQ,第4参数写1,证明只替换第一次,默认是0(无限替换)import rea = 'abcFBIabcFBIaFBICIAabc'r = re.sub('FBI','BBQ',a,1)print(r)# abcBBQabcCIAabc# abcBBQabcFBIaFBICIAabc
# 把函数当参数传到sub的列表里,实现把业务交给函数去处理,例如将FBI替换成$FBI$import rea = 'abcFBIabcFBIaFBICIAabc'def 函数名(形参): 分段获取 = 形参.group() # group()在正则表达式中用于获取分段截获的字符串,获取到FBI return '$' + 分段获取 + '$'r = re.sub('FBI',函数名,a)print(r)
以上是"python的正则表达式怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
字符
正则
表达式
模式
贪婪
字符串
函数
参数
之间
位置
内容
篇文章
特殊
成功
单个
多个
大小
字母
对象
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全画 一等奖
电脑网络安全工程师麦克
江门卫星软件开发直销价
威海平台软件开发解决方案
山西华锐阳软件开发
专利及标准数据库
软件开发框架协议
mysql数据库如何安装
ecshop 数据库字段
提高网络安全防范意识英语
绿盟科技与中国互联网协会
swpi数据库
正在连接频道服务器
多肽 数据库
应用软件开发属于什么专业
游戏服务器可以同时容纳多少人
数据库如何存储视频
数据库系统原理pdf
dbf数据库怎么用
服务器上插内存卡是什么作用
网络安全员大全
南阳网络安全教育平台下载
信息技术网络安全专业就业
黔南黔商互联网络科技
腾讯qq网络安全中心
网络安全活动周方案
AMG网络技术
拓邦软件开发工程师
云平台软件开发用什么软件
东南大学研究生网络安全