首页 / 正则 / python 的re模块与正则表达式
python 的re模块与正则表达式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python 的re模块与正则表达式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4011字,纯文字阅读大概需要6分钟。
内容图文
![python 的re模块与正则表达式](/upload/InfoBanner/zyjiaocheng/847/b994cf97db6c48748c74a4da92f2166e.jpg)
正则表达式
正则表达式是对字符串操作的一种逻辑公式. 我们一般使用正则表达式对字符串进?行匹
配和过滤.
1. 字符组
字符组很简单?用[]括起来. 在[ ]中出现的内容会被匹配, 例如:[abc] 匹配a或b或c
[a-z] 匹配a到z之间的所有字母 [0-9]匹配所有阿拉伯数字,能够样子的写的都是按照ASCII上的编码的顺序写的
元字符:常用的元字符
. 匹配除换行符以外的任意字符
\n 匹配一个换行符
\t 匹配一个制表符
\s 匹配任意的空白符
\S 匹配非空白符
\w 匹配字母或数字或下划线
\W 匹配非字母或数字或下划线
\d 匹配数字
\D 匹配非数字
\b 匹配一个单词的结尾
a|b 匹配字符a或字符b
( ) 匹配括号内的表达式,也表示一个组
使用量词是可以一次匹配到多个字符
* 重复零次或更多次{0,n}
+ 重复一次或更多次{1,n}
? 重复零次或一次{0,1}
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
在量词中的*, +,{} 都属于贪婪匹配. 就是尽可能多的匹配到结果.
例如:我是第一个A,然后我是第二个A
使用贪婪匹配的话是 .*A >>>直接获取的从开头到第二个A的位置
.+也是贪婪匹配
惰性匹配如 .*?A >>>>>获取的是从开头到第一个A的位置
分组
匹配15位身份证或18位身份号码eg:
^[1-9]\d{13,16}[0-9x]$
^[1-9]\d{14}(\d{2}[0-9x])?$
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$
Python的RE 模块
search、match、findall、finditer
import re res = re.search('e','alex and excengpter')#查找关键字,搜索到第一个的时候就返回,没有返回None # print(type(res))#<class '_sre.SRE_Match'> # print(res.group()) #e res1 = re.match('al','alex')#必须是从头开始匹配,搜索到第一个的时候就返回,没有返回None # print(type(res1))#<class '_sre.SRE_Match'> # print(res1.group())#al res2 = re.findall('哈把','我的天啊,哈哈啊哈啊哈哈哈') #查找所有的匹配的结果并以列表的形式返回,如果没有就返回空列表 res3 = re.findall('哈+','我的天啊,哈哈啊哈啊哈哈哈') # print(res2)#[] # print(res3)#['哈哈', '哈', '哈哈哈'] res4 = re.finditer('哈','我的天啊,哈哈啊哈啊哈哈哈') #与findall 一样,不同的是这个返回的是迭代器 #注意但是这个在迭代出来的时候还是需要使用group()才能显示里面的元素 # print(type(res4))#如果finditer 没有查找到内容的话,返回的是一个空的迭代器 for i in res4: print(i.group()) #还是需要使用group 才能显示里面的内容
split的使用
![python 的re模块与正则表达式 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506010440778.jpg)
![python 的re模块与正则表达式 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506010440810.jpg)
import re # 案例1 res5 = re.split('[ab]','ni shi yi ge sba sb ba') #按照a或b 进行切割 print(type(res5))#<class 'list'> print(res5)#['ni shi yi ge s', '', ' s', ' ', '', ''] res6 = re.split('([ab])','ni shi yi ge sba,sb,ba') #按照a或b 进行切割,并保留a,b print(type(res6))#<class 'list'> print(res6)#['ni shi yi ge s', 'b', '', 'a', ',s', 'b', ',', 'b', '', 'a', ''] # 案例2 gg = re.split(r'\d+','我2是3笨4蛋') print(gg) hh = re.split(r'(\d+)','我2是3笨4蛋') print(hh)View Code
compile 的使用
![python 的re模块与正则表达式 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506010440778.jpg)
![python 的re模块与正则表达式 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506010440810.jpg)
import re # 案例1 aa = re.compile(r'fa\d+of')#从正则表达式匹配的内容每个组起名字,定义一个正则表达式的模板,并进行预加载 cc = aa.search('hahd fajofa11111ofa') print(type(cc))#<class '_sre.SRE_Match'> print(cc.group())#fa11111of # 案例2 bb = re.compile(r'fa(?P<gg>\d+)of') # (?P<gg>)将括号内匹配到的东西进行命名,方便以后直接通过名字进行提取括号的内容 cc = bb.search('hahd fajofa11111ofa') print(cc.group())#fa11111of print(cc.group('gg'))#11111View Code
使用正则进行替换sub、subn
![python 的re模块与正则表达式 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506010440778.jpg)
![python 的re模块与正则表达式 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506010440810.jpg)
import re gg = re.sub(r'\d+','*将前面表达式匹配到的替换成我*','123我是有多么的爱你是笨蛋23333')#返回的是字符窜 print(gg) dd = re.subn(r'\d+','*将前面表达式匹配到的替换成我*','123我是有多么的爱你是笨蛋23333')#与上面的功能是一样的, # 但是返回的是元组,(第一个是替换后的字符串,第二个是替换的个数)View Code
使用re 的制作的简单的爬虫
from urllib.request import urlopen
import re
url = 'https://www.dytt8.net/html/gndy/dyzz/20181116/57793.html'
gg = urlopen(url).read().decode('gbk')
# print(gg)
dd = re.compile(r'<div id="Zoom">.*?译 名(?P<name>.*?)<br />.*?片 '
r' 名(?P<name1>.*?)<br />.*?年 代(?P<time>.*?)<br />.*?bgcolor=.*?href="(?P<Herf>.*?)">',re.S)
# name = dd.search(gg).group('name')
# name2 = dd.search(gg).group('name1')
# name3= dd.search(gg).group('time')
name4= dd.search(gg).group('Herf')
注意的是:
ret = re.findall('www.(baidu|guge).com', 'www.baidu.com')
print(ret) # ['baidu] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹
配结果,取消权限即可
ret = re.findall('www.(?:baidu| guge).com', ' 'www.baidu.com'')
print(ret) # [' 'www.baidu.com'']
内容总结
以上是互联网集市为您收集整理的python 的re模块与正则表达式全部内容,希望文章能够帮你解决python 的re模块与正则表达式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。