re模块 常用函数


1. findall() 函数 

1 find('正则表达式',‘待匹配的字符串’)  #返回匹配到字符串,并存放在列表中

  详解见:

1 import re
2 
3 ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
4 print(ret)  # ['oldboy']     这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
5 
6 ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
7 print(ret)  # ['www.oldboy.com']
练习 findall() 与分组

2. search() 函数

1 import re
2 ret = re.search('abc', 'this is abcABC').group()
3 print(ret) #结果 : 'abc'
4 # 函数会在字符串内按规则匹配,当找到第一个匹配结果时就结束查找,然后返回一个包含匹配信息的对象,该对象可以 通过   调用group()方法   得到匹配的字符串, 
5 # 如果没有匹配到字符串,则返回None
1 obj = re.compile('\d{3}')  #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
2 ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串
3 print(ret.group())  #结果 : 123

3. match() 函数

1 import re
2 ret = re.match('this', 'this is abcABC').group()
3 print(ret) #结果 : 'this'
4 # 在字符串开始处 就按规则匹配,其它 与search()函数使用方法一样

4 finditer() 函数

1 import re
2 ret = re.finditer('\d', 'ds3sy4784a')   #finditer返回一个存放匹配结果的迭代器
3 print(ret)  # 
4 print(next(ret).group())  #查看第一个结果  '3'
5 print(next(ret).group())  #查看第二个结果  '4'
6 print([i.group() for i in ret])  #查看剩余的匹配结果 ['7', '8', '4']

5 sub() 和 subn() 函数

1 import re
2 ret = re.sub('\d', 'H', 'eva3egon4yuan4', 1)#将数字替换成'H',参数1表示只替换1个
3 print(ret) #evaHegon4yuan4
4 
5 ret = re.subn('\d', 'H', 'eva3egon4yuan4')
6 print(ret)
7 #将数字替换成'H',返回元组(替换的结果,替换了多少次),即('evaHegonHyuanH', 3)

6 split() 函数

1 ret = re.split('[ab]', 'abcd')  # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
2 print(ret)  # ['', '', 'cd']
1 ret=re.split("\d+","eva3egon4yuan")
2 print(ret) #结果 : ['eva', 'egon', 'yuan']
3 
4 ret=re.split("(\d+)","eva3egon4yuan")
5 print(ret) #结果 : ['eva', '3', 'egon', '4', 'yuan']
6 
7 #在匹配部分加上()之后所切出的结果是不同的,
8 #没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,
9 #这个在某些需要保留匹配部分的使用过程是非常重要的。
练习-split() 与分组

扩展练习

 1 ret = re.search("<(?P\w+)>\w+","

hello

") 2 #还可以在分组中利用 ?P的形式给分组起名字 3 #获取的匹配结果可以直接用group('名字')拿到对应的值 4 print(ret.group('tag_name')) #结果 :h1 5 print(ret.group()) #结果 :

hello

6 7 ret = re.search(r"<(\w+)>\w+","

hello

") 8 #如果不给组起名字,也可以用 \序号 来找到对应的组,表示要找的内容和前面的组内容一致 9 #获取的匹配结果可以直接用group(序号)拿到对应的值 10 print(ret.group(1)) #结果 :h1 11 print(ret.group()) #结果 :

hello

匹配标签
 1 import re
 2 
 3 #匹配数字
 4 ret=re.findall(r"\d+","1-2*(60+(-40.35/5)-(-4*3))")
 5 print(ret) #['1', '2', '60', '40', '35', '5', '4', '3']
 6 
 7 #匹配整数
 8 ret=re.findall(r"-?\d+\.\d*|(-?\d+)","1-2*(60+(-40.35/5)-(-4*3))")
 9 print(ret) #['1', '-2', '60', '', '5', '-4', '3']
10 ret.remove("")
11 print(ret) #['1', '-2', '60', '5', '-4', '3']
12 
13 #匹配实数
14 ret=re.findall(r"-?\d+\.\d*|-?\d+","1-2*(60+(-40.35/5)-(-4*3))")
15 print(ret) #['1', '-2', '60', '-40.35', '5', '-4', '3']
匹配数字/整数/实数
 1 import re
 2 from urllib.request import urlopen
 3 
 4 def getPage(url):
 5     response = urlopen(url)
 6     return response.read().decode('utf-8')
 7 
 8 def parsePage(s):
 9     ret = re.findall(
10         '
.*?' 11 '
.*?' 12 '' 13 '(?P\d+).*?' 14 '(?P.*?)</span>.*?</span><span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?</span><span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><span>(?P<comment_num>.*?)评价</span></span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,s,re.S) </span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ret </span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> main(num): </span><span style="color: rgba(0, 128, 128, 1)">20</span> url = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">https://movie.douban.com/top250?start=%s&filter=</span><span style="color: rgba(128, 0, 0, 1)">'</span> % num <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> %s标记每页的首条信息</span> <span style="color: rgba(0, 128, 128, 1)">21</span> response_html = getPage(url) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">获取网页的全部内容</span> <span style="color: rgba(0, 128, 128, 1)">22</span> ret = parsePage(response_html) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">解析所需求的信息</span> <span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(ret) </span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 128, 128, 1)">25</span> count =<span style="color: rgba(0, 0, 0, 1)"> 0 </span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span> range(10): <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 10页</span> <span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 0, 1)"> main(count) </span><span style="color: rgba(0, 128, 128, 1)">28</span> count += 25 <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 每页25条信息</span></pre> <span class="1024sou_code_collapse">爬取网页-简单版</span> <pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">from</span> urllib.request <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> urlopen </span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> re </span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> json </span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> getPage(url): </span><span style="color: rgba(0, 128, 128, 1)"> 6</span> response =<span style="color: rgba(0, 0, 0, 1)"> urlopen(url) </span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 255, 1)">return</span> response.read().decode(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">utf-8</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">) </span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> parsePage(s): </span><span style="color: rgba(0, 128, 128, 1)"> 9</span> com =<span style="color: rgba(0, 0, 0, 1)"> re.compile( </span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><div class="item">.*?</span><span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><div class="pic">.*?</span><span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><em .*?></span><span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">(?P<id>\d+).*?</span><span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><span class="title">(?P<title>.*?)</span>.*?</span><span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?</span><span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><span>(?P<comment_num>.*?)评价</span></span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, re.S) </span><span style="color: rgba(0, 128, 128, 1)">17</span> ret = com.finditer(s) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> finditer返回一个存放匹配结果的迭代器</span> <span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> ret: </span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 255, 1)">yield</span><span style="color: rgba(0, 0, 0, 1)"> { </span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">id</span><span style="color: rgba(128, 0, 0, 1)">"</span>: i.group(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">id</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">), </span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(128, 0, 0, 1)">"</span>: i.group(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">), </span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">rating_num</span><span style="color: rgba(128, 0, 0, 1)">"</span>: i.group(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">rating_num</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">), </span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">comment_num</span><span style="color: rgba(128, 0, 0, 1)">"</span>: i.group(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">comment_num</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">), </span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)"> } </span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> main(num): </span><span style="color: rgba(0, 128, 128, 1)">26</span> url = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">https://movie.douban.com/top250?start=%s&filter=</span><span style="color: rgba(128, 0, 0, 1)">'</span> %<span style="color: rgba(0, 0, 0, 1)"> num </span><span style="color: rgba(0, 128, 128, 1)">27</span> response_html =<span style="color: rgba(0, 0, 0, 1)"> getPage(url) </span><span style="color: rgba(0, 128, 128, 1)">28</span> ret =<span style="color: rgba(0, 0, 0, 1)"> parsePage(response_html) </span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">print(ret)</span> <span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 128, 128, 1)">31</span> f = open(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">move_info7</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">"</span>, encoding=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">utf-8</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">) </span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 255, 1)">for</span> obj <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> ret: </span><span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(obj) </span><span style="color: rgba(0, 128, 128, 1)">34</span> data = json.dumps(obj, ensure_ascii=<span style="color: rgba(0, 0, 0, 1)">False) </span><span style="color: rgba(0, 128, 128, 1)">35</span> f.write(data + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">) </span><span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 0, 1)"> f.close() </span><span style="color: rgba(0, 128, 128, 1)">37</span> <span style="color: rgba(0, 128, 128, 1)">38</span> <span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(128, 0, 128, 1)">__name__</span> == <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">__main__</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">: </span><span style="color: rgba(0, 128, 128, 1)">39</span> count =<span style="color: rgba(0, 0, 0, 1)"> 0 </span><span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span> range(10<span style="color: rgba(0, 0, 0, 1)">): </span><span style="color: rgba(0, 128, 128, 1)">41</span> <span style="color: rgba(0, 0, 0, 1)"> main(count) </span><span style="color: rgba(0, 128, 128, 1)">42</span> count += 25</pre> <span class="1024sou_code_collapse">爬取网页-完整版</span> </div> <!--conend--> <div class="p-2"></div> <div class="arcinfo my-3 fs-7 text-center"> <a href='/t/etagid8-0.html' class='tagbtn' target='_blank'>Python</a> </div> <div class="p-2"></div> </div> <div class="p-2"></div> <!--xg--> <div class="lbox p-4 shadow-sm rounded-3"> <div class="boxtitle"><h2 class="fs-4">相关</h2></div> <hr> <div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-566513.html">学习《Python编程从入门到实践》PDF+代码训练</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-566439.html">python-----面向对象简单理解</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-565236.html">python多线程控制</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-564738.html">Sublime 的安装、汉化、配置、Python环境和插件</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-564855.html">python——time strftime() 函数表示当地时间</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-564276.html">python 初识函数</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-564187.html">python 函数对象 嵌套 闭包</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-563864.html">Python栈溢出——设置python栈大小</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-563952.html">python-面向对象-01课堂笔记</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-563329.html">python爬虫</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-563001.html">Python 之父的解析器系列之五:左递归 PEG 语法</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-563230.html">Python 为了提升性能,竟运用了共享经济</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div> <!----> <!----> </div> <!--xgend--> </div> <div class="col-lg-3 col-12 p-0 ps-lg-2"> <!--box--> <!--boxend--> <!--<div class="p-2"></div>--> <!--box--> <div class="lbox p-4 shadow-sm rounded-3"> <div class="boxtitle pb-2"><h2 class="fs-4"><a href="#">标签</a></h2></div> <div class="clearfix"></div> <ul class="m-0 p-0 fs-7 r-tag"> </ul> <div class="clearfix"></div> </div> <!--box end--> </div> </div> </div> </main> <div class="p-2"></div> <footer> <div class="container-fluid p-0 bg-black"> <div class="container p-0 fs-8"> <p class="text-center m-0 py-2 text-white-50">一品网 <a class="text-white-50" href="https://beian.miit.gov.cn/" target="_blank">冀ICP备14022925号-6</a></p> </div> </div> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?6e3dd49b5f14d985cc4c6bdb9248f52b"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </footer> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.min.js"></script> </body> </html>