023re模块(正则)

栏目: Python · 发布时间: 6年前

内容简介: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']

#  \ 特殊字符被去除特殊功能,普通字符被加上特殊功能

023re模块(正则)
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'))              #32

# | 管道符 代表或

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/微软面试题 "


 1 import  re
 2 content="IT面试题博客中包含很多<ahref=http://hi.baidu.com/mianshiti/blog/category/微软面试题>微软面试题</a>"
 3 #result=re.search('http(s?)://(\w+(.\w+)*/(\w*)?)+',content).group()
 4 #result1=re.findall('(http(s?)://(\w+(.\w+)*/(\w*)?)+)',content)
 5 result=re.search('http(s?)://(\w+(.\w+)*/(\w*)?)+',content).group()
 6 print(result)
 7 # 标准答案  '<a(?: [^>]*)+href=([^>]*)(?: [^>]*)*>'         # 这个我没有看明白是什么意思
 8 #(http(s?)://(\w+(.\w+)*/(\w*)?)+)这样使用findall的是[('http://hi.baidu.com/mianshiti/blog/category/微软面试题','','hi.baidu.com/mianshiti/blog/category/微软面试题','/category','微软面试题')]
 9 #应该是找到全部符合的,然后找小的符合的。调用search就是我想要的
10 #如果是http(s?)://(\w+(.\w+)*/(\w*)?)+这样,就不是我想要的,可能()是分组的问题导致的

View Code

4、题目:验证电子邮箱地址


1 import  re
2 x=input('输入邮箱地址:')
3 result=re.search('^(\w)+(\.\w)*(-\w)*(_\w)*@\w+((\.\w+)+)$',x).group()
4 print(result)
5 # 答案的正则是‘^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$'   ,我做的是加上答案后想了一下加的

View Code

作业:

计算器

思路,先算最里面括号的内容,里面可能出现加减乘除和幂运算(做成方法运算),然后结果代替原来的,循环。

023re模块(正则)

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)  的这类

太多的东西解决不了,后期再补上,很多东西没有学,先学其他,做好总结再说


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java Script深度剖析

Java Script深度剖析

卢云鹏、沈维伦、Don Gosselin、李筱青 / 卢云鹏、沈维伦、李筱青 / 北京大学出版社 / 2004-10-1 / 49.0

本书适合于大中专院计算机相关专业作为教材,也是JavaScript初学者以及JavaScript爱好者的理想参考用书。书中详细介绍了基本的JavaScript程序设计原理以及实现它们的语法,内容包括JavaScript简介,变理、函数、对角和事件,数据类型、运算符,结构化逻辑控制结构和语句,窗口和框架,表单,动态HTML和动画,cookie和安全性,服务器端 JavaScript,数据库连接,使用......一起来看看 《Java Script深度剖析》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换