re模块 常用函数

1. findall() 函数 

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

  详解见:https://www.cnblogs.com/nbk-zyc/p/11113328.html

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)  # <callable_iterator object at 0x10195f940>
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<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>")
 2 #还可以在分组中利用 ?P<name>的形式给分组起名字
 3 #获取的匹配结果可以直接用group(‘名字‘)拿到对应的值
 4 print(ret.group(‘tag_name‘))  #结果 :h1
 5 print(ret.group())  #结果 :<h1>hello</h1>
 6
 7 ret = re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>")
 8 #如果不给组起名字,也可以用  \序号   来找到对应的组,表示要找的内容和前面的组内容一致
 9 #获取的匹配结果可以直接用group(序号)拿到对应的值
10 print(ret.group(1)) #结果 :h1
11 print(ret.group())  #结果 :<h1>hello</h1>

匹配标签

 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         ‘<div class="item">.*?‘
11         ‘<div class="pic">.*?‘
12         ‘<em .*?>‘
13         ‘(?P<id>\d+).*?‘
14         ‘<span class="title">(?P<title>.*?)</span>.*?‘
15         ‘<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?‘
16         ‘<span>(?P<comment_num>.*?)评价</span>‘,s,re.S)
17     return ret
18
19 def main(num):
20     url = ‘https://movie.douban.com/top250?start=%s&filter=‘ % num    # %s标记每页的首条信息
21     response_html = getPage(url)    #获取网页的全部内容
22     ret = parsePage(response_html) #解析所需求的信息
23     print(ret)
24
25 count = 0
26 for i in range(10):   # 10页
27     main(count)
28     count += 25        # 每页25条信息

爬取网页-简单版

 1 from urllib.request import urlopen
 2 import re
 3 import json
 4
 5 def getPage(url):
 6     response = urlopen(url)
 7     return response.read().decode(‘utf-8‘)
 8 def parsePage(s):
 9     com = re.compile(
10         ‘<div class="item">.*?‘
11         ‘<div class="pic">.*?‘
12         ‘<em .*?>‘
13         ‘(?P<id>\d+).*?‘
14         ‘<span class="title">(?P<title>.*?)</span>.*?‘
15         ‘<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?‘
16         ‘<span>(?P<comment_num>.*?)评价</span>‘, re.S)
17     ret = com.finditer(s)   # finditer返回一个存放匹配结果的迭代器
18     for i in ret:
19         yield {
20             "id": i.group("id"),
21             "title": i.group("title"),
22             "rating_num": i.group("rating_num"),
23             "comment_num": i.group("comment_num"),
24         }
25 def main(num):
26     url = ‘https://movie.douban.com/top250?start=%s&filter=‘ % num
27     response_html = getPage(url)
28     ret = parsePage(response_html)
29     #print(ret)
30
31     f = open("move_info7", "a", encoding="utf-8")
32     for obj in ret:
33         print(obj)
34         data = json.dumps(obj, ensure_ascii=False)
35         f.write(data + "\n")
36     f.close()
37
38 if __name__ == ‘__main__‘:
39     count = 0
40     for i in range(10):
41         main(count)
42         count += 25

爬取网页-完整版

  

原文地址:https://www.cnblogs.com/nbk-zyc/p/11115867.html

时间: 2024-07-30 17:25:28

re模块 常用函数的相关文章

random模块常用函数

random模块常用函数: from random import * # Random float: 0.0 <= x < 1.0 random() # Random float: 2.5 <= x < 10.0 uniform(2.5, 10.0) # Integer: 0 <= x <= 9 randrange(10) # Even integer from 0 to 100 inclusive randrange(0, 101, 2) # Single rando

Python中的os模块常用函数

本文的参考文献为------<简明Python教程> os是python的一个重要的模块,使用前需要:import os 常用的函数如下: (1)os.name,返回正在使用的平台. (2)os.getcwd(),返回当前工作目录. (3)os.path.exists(),检验给出的路径是否真正地存在. (4)os.path.isfile(),检验给出的路径是否为一个文件. (5)os.path.isdir(),检验给出的路径是否为一个目录. (6)os.path.split(),返回一个路径

Python OS模块常用函数说明

Python的标准库中的os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行. 下面列出了一些在os模块中比较有用的部分.它们中的大多数都简单明了. os.sep可以取代操作系统特定的路径分隔符.windows下为 "\\" os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'pos

Python里的OS模块常用函数说明

Python的标准库中的os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行. 下面列出了一些在os模块中比较有用的部分.它们中的大多数都简单明了. os.sep可以取代操作系统特定的路径分隔符.windows下为 "\\" os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'pos

traceback模块常用函数和类

函数和类 使用项目数 1. format_exc() 用在(1847)个项目中 2. print_exc() 用在(1717)个项目中 3. format_exception() 用在(536)个项目中 4. extract_tb() 用在(310)个项目中 5. format_tb() 用在(302)个项目中 6. extract_stack() 用在(267)个项目中 7. print_exception() 用在(237)个项目中 8. format_exception_only() 用在

python:os模块与sys模块常用函数

print(sys.path)#打印环境变量 name.py:print(sys.argv)在命令行下输入python name.py 123,会依次输出name.py 123 os.system("dir")#打印当前目录下的文件,若成功返回的值为0,失败返回的值非0(即调即用),可能会出现乱码问题 ms = (os.popen("dir").read())#用read方法读取对象地址中的值,结果保存print(ms)#打印当前目录下的文件,不会出现乱码问题 os

【COCOS CREATOR 系列教程之二】脚本开发篇&事件监听、常用函数等示例整合

[Cocos Creator ](千人群):  432818031 上一篇,介绍了Himi在使用过cc所有组件后的一篇总结,没有具体介绍每个组件的原因在于官方文档很齐全,而且也有视频的介绍. 所以希望童鞋们可以把我这两篇博文当成对组件.脚本两部分开发的整理与总结. 后续的文章,Himi应该主要更新一些官方还未补充或者还没有的教程.避免无用功. 下面直接放出代码,因为不是很难理解.所以不再一一赘述,都是常用的函数.事件监听.动作回调.定时器等开发过程中必接触的. 大致内容如下: cc 属性介绍 获

phpcms V9 常用函数 及 代码整理

常用函数 及 常用代码 总结如下 1 <?php 2 //转换字符串或者数组的编码 3 str_charset($in_charset, $out_charset, $str_or_arr) 4 5 //获取菜单 6 menu($parentid, $code = '') 7 8 //判断当前浏览器是否为IE 9 is_ie() 10 11 //检查日期的合法性 12 is_date($ymd, $sep='-') 13 14 // 检查邮箱的合法性 15 is_email($email) 16

NIOS II常用函数整理-感谢slam原创

IO操作函数函数原型:IORD(BASE, REGNUM) 输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量函数说明:从基地址为BASE的设备中读取寄存器中偏移量为REGNUM的单元里面的值.寄存器的值在地址总线的范围之内.返回值: - 函数原型:IOWR(BASE, REGNUM, DATA)输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量,DATA为要写入的数据函数说明:往偏移量为REGNUM寄存器中写入数据.寄存器的值在地址总线的范围之内.返回值: - 函数