re模块和正则表达式
一、正则表达式: 官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 在线测试工具:http://tool.oschina.net/regex/ 方法规则: 1、字符组 2、字符 3、量词
?
? 特点: 1、^与$符连用,会精准限制匹配的内容,两者中间些什么,匹配的字符串就必须啥,无多勿少 2、正则在匹配的时候哦默认贪婪匹配,可以在量词后面加?,转成惰性匹配 3、量词必须跟在正则符号的后面,且量词只能够跟限制紧挨着它的哪一个正则符号 二、正则和re模块关系: 1、正则表达式不是python独有,它是一门独立的技术 所有编程语言否可以使用正则 但是如在python中使用,就必须依赖re模块 2、在python应用场景: 1.爬虫 2.数据分析 3、用法: 先调用 import re 1、re.findall res = re.findall(‘[a-z]+‘,‘eva egon jason‘) # findall(‘正则表达式‘,‘带匹配的字符串‘) print(res) # 输出 [‘eva‘,‘egon‘,‘jason‘] # 找出字符串中符合正则表达式全部内容 并且返回的是一个列表,列表中的元素就是正则匹配到的结果 忽略分组有限机制 ret1 = re.findall(‘www.(baidu|oldboy).com‘,‘www.oldboy.com‘) ret2 = re.findall(‘www.(?:baidu|oldboy).com‘,‘www.oldboy.com‘) # 忽略分组优先的机制 print(ret1,ret2) # [‘oldboy‘] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可 2、re.search ? ? 一般用if判断取值连用 res = re.search(‘a‘,‘eva egon jason‘) print(res) # search不会给你直接返回匹配到的结果 而是给你返回一个对象 print(res.group()) # 必须调用group才能看到匹配到的结果 ‘‘‘ 输出结果 <_sre.SRE_Match object; span=(2,3),match=‘a‘> a ‘‘‘ 注意: 3、re.match res = re.match(‘a‘,‘eva egon jason‘) print(res) print(res.group()) """ 注意: 1.match只会匹配字符串的开头部分 2.当字符串的开头不符合匹配规则的情况下 返回的也是None 调用group也会报错 """ 4、re.split ret = re.split(‘[ab]‘,‘abcd‘) # 先按‘a‘分割得到‘‘和‘bcd‘,在对‘‘和‘bcd‘分别按‘b‘分割 print(ret) # [‘‘,‘‘,‘cd‘] 返回的还是列表
ret=re.split("d+","eva3egon4yuan") print(ret) #结果 : [‘eva‘,‘yuan‘] ret1=re.split("(d+)","eva3egon4yuan") print(ret1) #结果 : [‘eva‘,‘3‘,‘4‘,‘yuan‘] ? 5、re.sub / re.subn ret = re.sub(‘d‘,‘H‘,‘eva3egon4yuan4‘,1) # 将数字替换成‘H‘,参数1表示只替换1个 # sub(‘正则表达式‘,‘新的内容‘,‘待替换的字符串‘,n) """ 先按照正则表达式查找所有符合该表达式的内容 统一替换成‘新的内容‘ 还可以通过n来控制替换的个数 """ print(ret) # evaHegon4yuan4 ret = re.subn(‘d‘,‘eva3egon4yuan4‘) # 将数字替换成‘H‘,返回元组(替换的结果,替换了多少次) ret1 = re.subn(‘d‘,1) # 将数字替换成‘H‘,返回元组(替换的结果,替换了多少次) print(ret,ret1) # 返回的是一个元组 元组的第二个元素代表的是替换的个数 #(‘evaHegonHyuanH‘,(‘evaHegon4yuan4‘,1) 6、re.compile obj = re.compile(‘d{3}‘) #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字 ret = obj.search(‘abc123eeee‘) #正则表达式对象调用search,参数为待匹配的字符串 res1 = obj.findall(‘347982734729349827384‘) print(ret.group()) #结果 : 123 print(res1) #结果 : [‘347‘,‘982‘,‘734‘,‘729‘,‘349‘,‘827‘,‘384‘] 7、re.finditer import re ret = re.finditer(‘d‘,‘ds3sy4784a‘) #finditer返回一个存放匹配结果的迭代器 print(ret) # <callable_iterator object at 0x10195f940> print(next(ret).group()) # 等价于ret.__next__() print([i.group() for i in ret]) #可查看剩余的左右结果 8、可以给正则表达式起别名 import re res = re.search(‘^[1-9](d{14})(d{2}[0-9x])?$‘,‘110105199812067023‘) # 还可以给某一个正则表达式起别名 res1 = re.search(‘^[1-9](?P<password>d{14})(?P<username>d{2}[0-9x])?$‘,‘110105199812067023‘) # print(res.group()) print(res1.group(‘password‘)) # 等于 print(res1.group(1)) print(res1.group(‘username‘)) # 等于print(res1.group(2)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |