之前我刚学的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模块(正则)的更多相关文章

  1. Python全栈 正则表达式(re模块正则接口全方位详解)

    re模块是Python的标准库模块 模块正则接口的整体模式 re.compile 返回regetx对象 finditer fullmatch match search 返回 match对象 match ...

  2. Python使用re模块正则式的预编译及pickle方案

    项目上线要求当中有言论和昵称的过滤需求, 客户端使用的是python脚本, python脚本中直接利用re模块来进行正则匹配, 一开始的做法是开启游戏后, 每帧编译2条正则式, 无奈运营需求里面100 ...

  3. re模块(正则)

    一, 什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法. 在python中,正则内嵌在python中,并通过re模块实现,正则表达模式被编译成一系列 ...

  4. python,re模块正则

    python没有正则需要导入re模块调用.正则表达式是为了匹配字符串,动态模糊的匹配,只要有返回就匹配到了, 没返回就没匹配到,前面是格式后面是字符串 最常用的匹配语法: re.match()#麦驰, ...

  5. 反射,hashlib模块,正则匹配,冒泡,选择,插入排序

    一.反射(自省) 首先通过一个例子来看一下本文中可能用到的对象和相关概念. import sys # 模块,sys指向这个模块对象import inspectdef foo(): pass # 函数, ...

  6. 常用模块-正则re

    常用模块之正则模块 """ 正则表达式与re模块的关系 1.正则表达式是一门独立的技术,任何语言均可使用 2.python中要想使用正则表达式需要通过re模块 " ...

  7. python3 re模块正则匹配字符串中的时间信息

    匹配时间: # -*- coding:utf-8 -*- import re def parseDate(l): patternForTime = r'(\d{4}[\D]\d{1,2}[\D]\d{ ...

  8. day19 python之re模块正则练习

    1.匹配标签 import re ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>" ...

  9. Python(re模块,正则)

    day18 正则表达式用处? 匹配 字符串 s = 'hello world' print(s.find('llo'))#第一个的位置 ret = s.replace('ll','xx') print ...

随机推荐

  1. SQL Cookbook—插入、更新与删除

    涉及到的问题–1.从一个表向另外的表中复制行–2.复制表定义(包含表记录)–3.一次向多个表中插入记录–4.–5.当相应行存在时更新–6.用其他表中的值更新–7.删除违反参照完整性的记录 –1.从一个 ...

  2. Ajax嵌套Ajax的模版

    引入 在开发中,难免会碰到需要发送两次ajax请求或者更多的情况 情境:我们需要resultB数据,后台提供的接口要先传入参数paramA,获取到resultA,然后resultA作为参数,调用另外一 ...

  3. JAVA实现多线程处理批量发送短信、APP推送

    /** * 推送消息 APP.短信 * @param message * @throws Exception */ public void sendMsg(Message message) throw ...

  4. C# dynamic json

    对应普通对象,写个扩展方法,ToJson蛮方便. 但是 dynamic 类型就不行了,因为是运行时解析,只能转换为强类型 IDictionary<string, object> 才可以. ...

  5. Magento 2中文手册教程 - Magento 2 安装流程图

    下图提供了安装Magento 2的安装流程概述: 设置你的服务器环境. 安装magento 2 必备软件, PHP, Apache, MySQL. 系统需求详细信息: 2.1.x 系统需求 获得mag ...

  6. 01.MD5加密

    namespace _01.MD5加密 { class Program { static void Main(string[] args) { //MD5加密就是给想要的密码或者其它字符加密 //如果 ...

  7. 卸载或安装程序出现:The feature you are trying to use is on a network resource ...

    卸载或安装程序出现:The feature you are trying to use is on a network resource ... 这种情况可能是因为原先已经安装过这个软件,所以要先卸载 ...

  8. 用户登录时,获取用户ip地址

    使用django来获取用户访问的IP地址,如果用户是正常情况下通过request.META['REMOTE_ADDR']  可以获得用户的IP地址.但是有些网站服务器会使用ngix等代理http,或者 ...

  9. AMD 规范与CMD 规范概要

    命名冲突和文件依赖,是前端开发过程中的两个经典问题.通过模块化开发来解决. AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMD CMD 规范在这 ...

  10. vue-cli项目打包多个与static文件同级的静态资源目录(copy-webpack-plugin插件的使用)

    场景 业务要求能够直接通过 "域名+/file"的方式访问静态资源的html,然而产品绝对static暴露在url中不好看又不能直接将html放在static中.所以想到了既然st ...