re模块
Posted niuli1987
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了re模块相关的知识,希望对你有一定的参考价值。
常用的方法 findall / search / match / compile / finditer sub subn split
import re findall, search, match re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。 s = ‘a123asd456‘ #re.findall() 返回一个列表,里面含有没一个匹配的元素 res1 = re.findall(‘d‘,s) print(res1) re.search() 返回一个对象,需要group()配合,返回第一个匹配的元素 res2 = re.search(‘d‘,s) print(‘search:‘ + res2.group()) re.match() 跟 search 一样,但是如果第一个要匹配的元素的话,会报错,只能在字符串开头处进行匹配 res3 = re.match(‘d‘,s) print(‘match:‘+res3.group()) sub 检索和替换匹配项, subn 替换匹配项(几次), split 分割字符串(几次) s = r‘水电费123fffffasad,.,.,;[]\/dad‘ res4 = re.sub(‘d‘,‘x‘,s) # 把所有匹配项都替换为‘x‘ 并返回一个字符串 print(res4) res5 = re.subn(‘d‘,‘x‘,s) # 把所有匹配项都替换为‘x‘ 并返回一个含有 已替换的字符串和替换次数 print(res5) res6 = re.split(‘d‘,s,) # 把匹配项作为分割符,分割字符串,并可以在最后添加次数参数,可以分割按需分割几次,如果有分组,分组优先,保留分组 print(res6) 进阶方法: conpile finditer compile 爬虫,自动化方向: 预编译,提高时间效率 compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用 s = r‘水电费123fff-222ffasa-29d,.,.,;[]\/dad‘ com = re.compile(‘-0.d+|-[1-9]d+(.d+)?‘) res = com.search(s).group() print(res) finditer 空间效率 print(re.findall(‘d‘,‘sjkhkdy982ufejwsh02yu93jfpwcmc‘)) # [‘9‘, ‘8‘, ‘2‘, ‘0‘, ‘2‘, ‘9‘, ‘3‘] ret = re.finditer(‘d‘,‘sjkhkdy982ufejwsh02yu93jfpwcmc‘) for r in ret: print(r.group()) # 9 # 8 # 2 # 0 # 2 # 9 # 3 分组() 分组优先 分组遇见search ret = re.search(‘d+(.d+)(.d+)(.d+)?‘,‘1.2.3.4-2*(60+(-40.35/5)-(-4*3))‘) print(ret.group()) print(ret.group(1)) print(ret.group(2)) print(ret.group(3)) ret = re.findall(‘>(w+)<‘,r‘<a>wahaha<a>‘) print(ret) ret = re.search(r‘<(w+)>(w+)</(w+)>‘,r‘<a>wahaha</b>‘) print(ret.group()) print(ret.group(1)) print(ret.group(2)) 分组命名 ret = re.search("<(?P<name>w+)>w+</(?P=name)>","<h1>hello</h1>") print(ret.group(‘name‘)) #结果 :h1 # print(ret.group()) #结果 :<h1>hello</h1> ret = re.search(r"<(w+)>w+</1>","<h1>hello</h1>") print(ret.group(1)) # print(ret.group()) #结果 :<h1>hello</h1> ret = re.search(r‘<(?P<tag>w+)>(?P<c>w+)</(w+)>‘,r‘<a>wahaha</b>‘) print(ret.group()) print(ret.group(‘tag‘)) print(ret.group(‘c‘))
以上是关于re模块的主要内容,如果未能解决你的问题,请参考以下文章