博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day022 python (re模块和 模块)
阅读量:4692 次
发布时间:2019-06-09

本文共 3815 字,大约阅读时间需要 12 分钟。

re模块是python提供的一套关于正则表达式的模块.核心功能有四个:

1.findall (查找所有,返回list)

lst=re.findall("m",'salalwmaopd')print(lst) #['m']lst=re.findall(r"\d+","加速阶段20,安吉斯36")print(lst)  #['20', '36']
2 search (会进行匹配,但如果匹配到了第一个结果,就会返回这个结果,如果匹配不到search则返回none
ret=re.search("dad","5dad,dakda555")print(ret.group()) # dad

3  match(只能从字符串开头进行匹配)

 

ret=re.match("v","vsaDAW")print(ret.group())  #v

4   finditer (和findall差不多,只不过返回的是迭代器)

ret=re.finditer("\d+","sdkal2000.aisjd5")for i in ret:  # 从迭代器中获取到的是分组的信息    print(i.group()) # 2000    5

其他操作

 

 
ret=re.split('[ab]','asdafvacaba') # 按a或者b来切割print(ret)  #['', 'sd', '', 'v', 'c', '', '', '']ret=re.sub(r"\d+","??","alksdad0212w1pdjv3na;s")  # 把字符串中的数字替换成??print(ret) # alksdad??w??pdjv??na;sret=re.subn(r"\d+","??","alksdad0212w1pdjv3na;s")  # 把字符串中的数字替换成??,替换了几次print(ret)  # ('alksdad??w??pdjv??na;s', 3)# obj = re.compile(r"\d+")  # 写一次下面直接用# lst = obj.findall("大阳哥昨天赚了5000块")# lst2 = obj.findall("银行流水5000, 花了6000")# print(lst)# print(lst2)obj = re.compile(r"\d+e{3}")obj1 = re.compile(r"(?P
\d+)(?P
e{3})") # (?P
<名字>
正则) 把正则匹配到的内容分组成"名字"组ret = obj.search("abcdefg123456eeeee")#ret1 = obj1.search("abcdefg123456eeeee")#print(ret.group()) #123456eeeprint(ret1.group("id")) # 123456print(ret1.group("zimu")) #eee# split里有个坑ret=re.split("\d+","eva3egon4yuan")print(ret) #结果 : ['eva', 'egon', 'yuan']# 看下面ret=re.split("(\d+)","eva3egon4yuan") # 加了括号 很简单 表示 留刀print(ret) #结果 : ['eva', '3', 'egon', '4', 'yuan']# findall 也有坑:ret = re.findall('www.(baidu|oldboy).com', 'www.baidu.com')print(ret) #['baidu'] 匹配结果为这个 但正常是不想要这个的 # 这是因为findall会优先把匹配结果组里内容返回,如果想要匹 配结果,取消权限即可# 解决方式:ret = re.findall('www.(?:baidu|oldboy).com', 'www.baidu.com') # 直接加?:取消权限print(ret) # ['www.baidu.com'] 正常了
 

二 import 

 

看代码 :

yitian.py print("当当当")main_person_man="无忌哥哥"main_person_wowan="赵敏"low_person_man_one="成昆"low_person_man_two='周芷若'def fight_on_light_top():    print("光明顶大战",main_person_man,'破坏了',low_person_man_one,'的阴谋')def  fight_in_shaolin():    print("少林林寺⼤大战", main_person_man, "破坏了了", low_person_man_two, "的大阴 谋")

 

金庸.py import yitian  # 导入模块此时会默认执行该模块的中的代码# import yitian  #  该模块已经导入过了,不会重复执行代码# import yitianimport sysif __name__ =='__main__':  # 加了 __name__ 可以屏蔽掉一些不希望别人导入就运行的一些代码                                #  只有运行自己才会打印  导用的时候是不启动这里的    yitian.main_person_man='大师'# 在此模块中改变了主角名字 # print(sys.modules.keys())  # 查看导入的模块 print(yitian. main_person_man)   ##使用模块中定义好的名yitian.fight_on_light_top()  # 调用模块中的函数#此时我们在金庸模块中引入了yitian模块.# 导入模块创立新的名称空间#在新的名称空间里运行该模块中的代码#创建模块的名字,并使用该名字作为该模块在当前模块的名字.可以使用globals来查看模块的名称空间#查看自己的名称空间# print(globals()) #yitian': 

 

 
金庸用.py import yitianimport 金庸print(yitian.main_person_man) # 大师    上个模块改变了主角名字 所以此刻出来的是大师yitian.fight_in_shaolin()  #    少林林寺⼤大战 大师 破坏了了 周芷若 的大阴 谋# 如何避免此类问题呢 引入__name__# 当我们把一个模块作为程序运行的入口时. 此时该模块的__name__是"__main__" , 而 如果我们把模块导入时. 此时模块内部的__name__就是该模块自
三  form xxx import xxx 在使用from的时候, python也会给我们的模块创建名称空间,这一点和import是⼀样的, 但是from xxx import xxx的时候,我们是把这个空间中的一些变量引入过来了, 说白了,就 是部分导入,当一个模块中的内容过多的时候. 我们可以选择性的导入要使用的内容. 
from yitian import fight_in_shaolin fight_in_shaolin()

此时是可以正常运行的. 但是我们省略了之前的模块,函数() 直接函数()就可以执行了, 并且from语句也支持⼀行语句导入多个内容. 

from yitian import fight_in_shaolin, fight_on_light_top, main_person_man fight_in_shaolin() fight_on_light_top() print(main_person_man)

 

同样支持as
from yitian import fight_in_shaolin, fight_on_light_top, main_person_man asbig_lao fight_in_shaolin()fight_on_light_top()print(big_lao)
 

最后. 看一下from的坑,当我们从一个模块中引入一个变量的时候,如果当前文件中出现了重名的变量时. 会覆盖掉模块引入的那个变量.

 
from yitian import main_person_man main_person_man = "超级大灭绝" print(main_person_man)
 

所以,不要重名 切记. 不要重名! 不仅是变量量名不要重复,我们自己创建的py文件的名字不要和系统内置的模块重名.否则,引入的模块都是python内置的模块. 切记, 切记. 

补充 :

from xxx import * 

从xxx导入所有. 如果模块内部有__all__ 导入all中的内容. 如果没有__all__全部都导入
 

转载于:https://www.cnblogs.com/systemsystem/p/9778829.html

你可能感兴趣的文章
L2_深入虎穴
查看>>
adb shell am 的用法
查看>>
实现自动点击
查看>>
MVP开发模式的理解
查看>>
jquery实现带左右箭头和数字焦点的图片轮播手写代码
查看>>
面向对象
查看>>
Oracle 使用技巧(一)
查看>>
linux常用命令整理
查看>>
Servlet 3.0版本初次使用小结
查看>>
ajaxfileupload、jqGrid、linux命令、文件上传带进度显示、backToTop插件、发送带附件的EmailService...
查看>>
音乐和音效的加载播放
查看>>
chartContrl 折线图添加报警线和一些其他设置 放大缩小折线图等
查看>>
Unity多开的方法
查看>>
帮同学的忙,随意写了个课程设计(关于循环双向列表)
查看>>
cygwin install git
查看>>
c++中new和delete的使用方法
查看>>
WPF 之 TreeView右键选中节点及节点重命名
查看>>
PBN旁切转弯保护区组图
查看>>
前端学习11.14
查看>>
[小记]Android缓存问题
查看>>