之前我刚学的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. 有意思的shader案例

    屏幕水波效果 https://blog.csdn.net/puppet_master/article/details/52975666

  2. extern、 const、static的理解

    1.extern:是一个声明,用来告诉编译器其它文件中存在这个变量,可以拿到使用.是文件级的 2.static:   是一个文件内的声明,只能在本文件内使用,是文件中的(函数级的) 3.const   ...

  3. window.open以post方式提交(转)

    function openWindowWithPost(url,name,keys,values) { var newWindow = window.open(url, name); if (!new ...

  4. java 并发(六) --- 锁

          阅读前阅读以下参考资料,文章图片或代码部分来自与参考资料 概览 一张图了解一下java锁. 注 : 阻塞将会切换线程,切换内核态和用户态,是比较大的性能开销 各种锁 为什么要设置锁的等级 ...

  5. Java CAS总结

    文章目录 1. CPU指令对CAS的支持(CPU的cas指令是原子的) 或许我们可能会有这样的疑问,假设存在多个线程执行CAS操作并且CAS的步骤很多,有没有可能在判断V和E相同后,正要赋值时,切换了 ...

  6. Ant design 项目打包后报错:"Menu(or Flex) is not defined"

    我的项目使用了ant-design 和 ant-design-mobile,在测试环境上没问题,但是打包发布之后控制台报错 Menu is not defined Flex is not define ...

  7. Git更新或提交出错的解决办法

    一.舍弃本地代码,用远端版本覆盖本地版本. 当自己本地修改很少,更新代码出现冲突时,“error: Your local changes to the following files would be ...

  8. 52张扑克牌快速生成js

    function* generatePoker() { const points = ['A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K']; yield* ...

  9. 项目经验:GIS<MapWinGIS>建模第七天

    终天完成了管网地图的附加功能..实现了了管网与地图结合

  10. Qt 之模型/视图(自定义按钮)

    https://blog.csdn.net/liang19890820/article/details/50974059 简述 衍伸前面的章节,我们对QTableView实现了数据显示.自定义排序.显 ...