023re模块(正则)
之前我刚学的python知识点,没有题目进行熟悉,后面的知识点会有练习题,并且慢慢补充。
看到很多都是很简单的练习,碰到复杂、需要运用的再补充吧
#字符串中使用到正则表达式
s='hello world'
print(s.find('ll'))
ret=s.replace('ll','aiq')
print(ret)
print(s.split('o'))
#字符串里面使用的是完全匹配
##引入正则:模糊匹配
#引入例子
import re
ret=re.findall('w\w{2}l','hello world',)
print(ret) # ['worl']
##元字符(11个) . 通配符 ^尖角符(头) $(尾) * + { } [ ] \ ( ) |
#.通配符
ret=re.findall('w..l','hello world',)
print(ret) # ['worl']
.表示任何东西,但一个点只能表示一位
#^ 尖角符
ret=re.findall('^w..l','hello world',)
print(ret) # []
^ 只是在开头匹配,world在开头才能匹配
#$
ret=re.findall('w..ld$','hello world',)
print(ret) # ['world']
$ 只是在末尾匹配
#*
ret=re.findall('xia.*aiq','xiawlgakwjegkawaiqweagkxiadajglagjgaaiqlskajweg')
print(ret) # ['xiawlgakwjegkawaiqweagkxiadajglagjgaaiq']
* 表示重复前面多个,包括0个,比如这里是重复多个‘.’
在例如:重复多个a
ret=re.findall('ba*','uwefwoiafbaaaaaaaaaa',)
print(ret) # ['xiawlgakwjegkawaiqweagkxiadajglagjgaaiq']
#+
ret=re.findall('a+b','aaaaabhweogna')
print(ret) # ['aaaaab']
+表示一个以上
#?
ret=re.findall('a?b','aaaaabhweognabawegb')
print(ret) # ['ab','ab','b']
?表示0或者1个
# { }
ret=re.findall('a{5}b','aaaaabjaweogldksgajaaab')
print(ret) # ['aaaaab']
# {5} 表示固定的有5个
ret=re.findall('a{1,5}b','aaaaabjaweogldksgajaaab')
print(ret) # ['aaaaab','aaab']
# {1,5} 表示1~5次的都可以
##. ^ $ * + ? { } 推荐使用 * + ?
##后面四个更常用
#[ ] 字符集:取消元字符的特殊功能(\ ^ -)
ret=re.findall('a[c,d]iq','aeawadiqawe',)
print(ret) # ['adiq']
ret=re.findall('[a-z]','aiq')
print(ret) # ['a','i','q']
ret=re.findall('[.*]','aiq') # . * 都没有意义了
print(ret) # []
# 字符集里面加^
ret=re.findall('[^t]','wjrttttt')
print(ret) # ['w','j','r']
ret=re.findall('[^t,j]','wjrttttt') #这里是出了't , j'的其他字符
print(ret) # ['w','r']
# \ 特殊字符被去除特殊功能,普通字符被加上特殊功能
print(re.findall('\d{11}','aweoigw12354616579 12221845651')) # ['12354616579']
print(re.findall(r'I\b','Iloveq.')) # ['I'] \b表示特殊字符
print(re.search('aiq','awekgwaeiaiqawefweaiq',)) # <_sre.SRE_Matchobject;span=(9,12),match='aiq'>
findall找字符串中全部符合的,返回一个列表
search找到第一个结果,返回一个不知道什么类型的东西。使用.group方法可以返回找到的字符串
没有找到不能调用.group方法
# \\ 找\
ret=re.findall('\\\\','abc\de')
print(ret) # ['\\']
ret=re.findall(r'\\','abc\de')
print(ret) # ['\\']
\b在python解释器有特殊意义,加了r过后,python解释器就不会解释这个了
#()分组
print(re.search('(as)+','sdjasasasaswefkajasasafw').group())#asasasas
ret=re.search('(?P<name>\w{2})/(?P<age>\d{2})','xq/32') # 命名分组 <?P<name>
print(ret.group()) #xq/32
print(ret.group('name')) #xq
print(ret.group('age')) #
# | 管道符 代表或
print(re.search('(as)|3','as3').group()) # as
ret=re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34ttt456/qqq') # ?P<id> 这里是自己定义一个名字
print(ret.group()) # 456/qqq
print(ret.group('id')) # 456/qqq
print(ret.group('name')) # qqq
使用findall方法得到的结果 [('xq', '32')]
################################################################
正则表达式的方法
1、findall():匹配的结果返回到了一个列表里面
2、search():返回匹配到的第一个对象,可以调用group方法返回结果
3、match():只在字符开始匹配,和^号效果一样,但是 返回对象
4、split():先按j分,然后在把分开的部分按s分
ret=re.split('[j,s]','djksal') # ******
print(ret) # ['d','k','al']
5、sub():代替
ret=re.sub('x..ui','aiq','xijuialwewejgaiq')
print(ret) # aiqalwewejgaiq
6、compile():编译了一个规则,通过规则对象
k=re.compile('\.com')
ret=k.findall('afaewlj.comawelgkj')
print(ret) # ['.com']
7、finditer():得到一个可迭代对象
ret=re.finditer('\d','sweg273932hk2k3jt23jk')
print(next(ret).group())
#看一本书上的贪婪性匹配算法和懒惰性匹配算法
上面都是贪婪的
#懒惰性匹配算法
result=re.findall('<.+>','aiq<book><title>python</title><author>jiang<author></book>ai')
print(result) # 贪婪性['<book><title>python</title><author>jiang<author></book>']
result=re.findall('<.+?>','aiq<book><title>python</title><author>jiang<author></book>ai')
print(result) # 懒惰性 ['<book>', '<title>', '</title>', '<author>', '<author>', '</book>']
感觉就是后面加了个问号,书上的例子都是这样。没错,就是多了个?
################################################################
练习:
1、查找字符串中的6位数
result=re.findall('\d{6}','hold on 16574 153486 46514 56ef5 sa5fef 486456')
print(result) # ['153486','486456']
2、中国电话号码(0751-6228666,021-62232333,区号2-3位,后面号码6-8位)
result=re.findall('0\d{2,3}-\d{6,8}','电话号码:0750-6225680,姓名:qq')
print(result)
3、题目:写出正则表达式,从一个字符串中提取链接地址。比如
"IT面试题博客中包含很多 <a href=http://hi.baidu.com/mianshiti/blog/category/微软面试题> 微软面试题 </a> "
则需要提取的地址为 " http://hi.baidu.com/mianshiti/blog/category/微软面试题 "
import re
content="IT面试题博客中包含很多<ahref=http://hi.baidu.com/mianshiti/blog/category/微软面试题>微软面试题</a>"
#result=re.search('http(s?)://(\w+(.\w+)*/(\w*)?)+',content).group()
#result1=re.findall('(http(s?)://(\w+(.\w+)*/(\w*)?)+)',content)
result=re.search('http(s?)://(\w+(.\w+)*/(\w*)?)+',content).group()
print(result)
# 标准答案 '<a(?: [^>]*)+href=([^>]*)(?: [^>]*)*>' # 这个我没有看明白是什么意思
#(http(s?)://(\w+(.\w+)*/(\w*)?)+)这样使用findall的是[('http://hi.baidu.com/mianshiti/blog/category/微软面试题','','hi.baidu.com/mianshiti/blog/category/微软面试题','/category','微软面试题')]
#应该是找到全部符合的,然后找小的符合的。调用search就是我想要的
#如果是http(s?)://(\w+(.\w+)*/(\w*)?)+这样,就不是我想要的,可能()是分组的问题导致的
4、题目:验证电子邮箱地址
import re
x=input('输入邮箱地址:')
result=re.search('^(\w)+(\.\w)*(-\w)*(_\w)*@\w+((\.\w+)+)$',x).group()
print(result)
# 答案的正则是‘^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$' ,我做的是加上答案后想了一下加的
作业:
计算器
思路,先算最里面括号的内容,里面可能出现加减乘除和幂运算(做成方法运算),然后结果代替原来的,循环。

re.search('\([^()]+\)','((3+6)*3)') # 取最里面的括号
1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))
难度加深 2*(-15)-(-6)/(-2) 的这类
太多的东西解决不了,后期再补上,很多东西没有学,先学其他,做好总结再说
023re模块(正则)的更多相关文章
- Python全栈 正则表达式(re模块正则接口全方位详解)
re模块是Python的标准库模块 模块正则接口的整体模式 re.compile 返回regetx对象 finditer fullmatch match search 返回 match对象 match ...
- Python使用re模块正则式的预编译及pickle方案
项目上线要求当中有言论和昵称的过滤需求, 客户端使用的是python脚本, python脚本中直接利用re模块来进行正则匹配, 一开始的做法是开启游戏后, 每帧编译2条正则式, 无奈运营需求里面100 ...
- re模块(正则)
一, 什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法. 在python中,正则内嵌在python中,并通过re模块实现,正则表达模式被编译成一系列 ...
- python,re模块正则
python没有正则需要导入re模块调用.正则表达式是为了匹配字符串,动态模糊的匹配,只要有返回就匹配到了, 没返回就没匹配到,前面是格式后面是字符串 最常用的匹配语法: re.match()#麦驰, ...
- 反射,hashlib模块,正则匹配,冒泡,选择,插入排序
一.反射(自省) 首先通过一个例子来看一下本文中可能用到的对象和相关概念. import sys # 模块,sys指向这个模块对象import inspectdef foo(): pass # 函数, ...
- 常用模块-正则re
常用模块之正则模块 """ 正则表达式与re模块的关系 1.正则表达式是一门独立的技术,任何语言均可使用 2.python中要想使用正则表达式需要通过re模块 " ...
- python3 re模块正则匹配字符串中的时间信息
匹配时间: # -*- coding:utf-8 -*- import re def parseDate(l): patternForTime = r'(\d{4}[\D]\d{1,2}[\D]\d{ ...
- day19 python之re模块正则练习
1.匹配标签 import re ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>" ...
- Python(re模块,正则)
day18 正则表达式用处? 匹配 字符串 s = 'hello world' print(s.find('llo'))#第一个的位置 ret = s.replace('ll','xx') print ...
随机推荐
- 修改MyEclipse8.5的workspaces
到MyEclipse8.5的安装目录下 我安装在D盘,路径为:D:\Genuitec\MyEclipse 8.5\configuration\config.ini 打开config.ini文件: ...
- php的stristr()函数,查找字符
1.用法,要传2个参数 stristr(string,search):查找并返还匹配后,剩下的部分字符串 查找过程不区分大小写,要区分大小写用 strstr(string,search)少一个字母i ...
- 登录mysql 报 Access denied for user 'root'@'localhost' 错误
安装mysql后登录提示:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:yes) 解决如下 ...
- solr6.6教程-基础环境搭建(一)
目前网上关于solr6.+的安装教程很少,有些6.0之前的教程在应用到6.+的版本中出现很多的问题,所以特别整理出来这一片文章,希望能给各位码农一些帮助! 很少写些文章,如有不对的地方,还希望多多指导 ...
- PS基础,英语
PS基础(矢量图案的绘制) 水平参考线:新建背景(长宽一致,背景内容为透明)---设置水平参考线(水平垂直都要)---完成. 背景制作:设置前景色---用矩形选框工具绘制正方形选区(背景已被参考线平分 ...
- 从代理模式到Spring AOP
什么是代理模式 假如我喜欢上隔壁班的翠花,但是我没胆量向她送花,这时候我需要一个铁杆哥们帮我做这件事, 很明显这哥们是个代理,是去执行任务的,但是花实际上是我"送"的,代理和我一样 ...
- [javaEE] jsp的指令
jsp的指令:jsp的指令(directive)是为jsp引擎而设计的,他们并不直接产生任何可见输出,而是告诉引擎如何处理jsp 页面中的其他部分 页面头部的page指令 <%@page imp ...
- js 去除空格回车换行
开发中遇到特殊需求,需要将空格回车换行替换成逗号 直接使用正则表达式解决: 变量.replace(/\s+/g,","); 如果想要去除则将后面逗号变成空就OK了.
- Django之路由、模板和模型系统 (转载)
一.路由系统 浏览器会自动给url后加一个“/” django会自动给路由的正则表达式前面加一个“/” django会给任何不带“/”结尾的url语句添加“/”(可设置) 短路路由规则:匹配到第一条就 ...
- PHP 八种基本的数据类型
四种标量类型: boolean (布尔型) integer (整型) float (浮点型, 也称作 double) string (字符串) 两种复合类型: array (数组) object (对 ...