python re模块下载_python: re模块
在Python中可以使用正则表达式, Python提供re模块,包含所有正则表达式的功能。由于Python的字符串本身也用\转义,所以要特别注意:在字符串的前面加上 r 的前缀, 就不用考虑转义的问题了.
s1 = 'djioi\ndjj' #\n 表示换行
print(s1)#djioi#djj
s2= r'djioi\ndjj' #字符串前加个r 就不用考虑转义的问题了.
print(s2) #djio
python的re模块提供了很多种有关正则表达式的方法
一 . 匹配
1. findall
语法 : re.findall('正则表达式', '字符串')
importre
ret= re.findall('\d+', '19874ashfk0248') #匹配数字,数字的长度至少为1
print(ret) #返回值为列表#['19874', '0248']
当正则表达式里有分组()时, 会优先显示分组里匹配的字符串,无论分组有没有匹配到,没有匹配到则为空字符串' ', 可以在分组里的第一个位置加上 '?:' ,就会取消分组的优先显示特权.
ret2 = re.findall('\d+(\w+)', '19874ashfk0248')print(ret2) #['ashfk0248']
ret3= re.findall('(-)?\d+', '78543')print(ret3) #['']
ret2 = re.findall('\d+(?:\w+)', '19874ashfk0248') #在分组里加入 ?:
print(ret2) #['19874ashfk0248']
ret3= re.findall('(?:-)?\d+', '78543')print(ret3) #['78543']
2. search
语法 : search('正则表达式', '字符串')
ret1 = re.search('\d+', '19874ashfk0248')print(ret1) #
print(ret1.group()) #19874
ret3 = re.search('\d', 'shuyuiiuus')print(ret3) #None 没有匹配上的字符时,会返回None#print(ret3.group()) # 报错: 'NoneType' object has no attribute 'group'
当正则表达式里有分组()时,group()可以传数字来显示第几个分组匹配的值, 数字为0或没有时,表示显示匹配所有的值.
ret2 = re.search('(\d+)(\w+)(\d+)', '19874ashfk0248')print(ret2.group()) #19874ashfk0248
print(ret2.group(0)) #19874ashfk0248
print(ret2.group(1)) #19874
print(ret2.group(2)) #ashfk024
print(ret2.group(3)) #8
3. match
语法 : re.match('正则表达式', '字符串')
ret1 = re.match('\d+', '786jhg032')print(ret1) #
print(ret1.group()) #786
ret2= re.match('\d+', 'kt786jhg032')#字符串的第一个不是数字,match里的正则表达式自带开始符: ^ ,所以字符串的第一个字符必须是数字才能匹配上.
print(ret2) #None#print(ret2.group()) # 报错: 'NoneType' object has no attribute 'group'
4. finditer
语法 : re.finditer('正则表达式', '字符串')
ret1 = re.finditer('\d+', '786jhg032te654') #ret1是个迭代器
print(ret1) #
print(ret1.__next__().group()) #786
print(ret1.__next__().group()) #032
print(ret1.__next__().group()) #654
总结 findall, search, match, finditer 的区别 :
findall : 在string中查找所有 匹配成功的组, 即用括号括起来的部分, 返回list对象, 每个列表元素是由每个匹配的所有组组成的list.
search : 在string中进行搜索,成功返回object, 失败返回None, 只匹配一个。
match : 匹配string 开头,成功返回object, 失败返回None,只匹配一个。
finditer : 在string中查找所有 匹配成功的字符串, 返回iterator,每个元素是一个object。
二. 替换
1. sub
语法 : re.sub('正则表达式', '替换的元素', '字符串', 次数)
ret1 = re.sub('\d+', 'h', 'dguj23kk321jjjj222kkkk111', 2) #把字符串里匹配到的的数字替换成 'h', 只替换2次
print(ret1) #dgujhkkhjjjj222kkkk111
ret2 = re.sub('\d+', 'h', 'dguj23kk321jjjj222kkkk111') #没有替换次数,默认全部替换
print(ret2) #dgujhkkhjjjjhkkkkh
2. subn
语法 : re.subn('正则表达式', '替换的元素', '字符串', 次数)
ret3 = re.subn('\d+', 'd', 'hhd3567fg8er590ggg0mmm345') #subn会返回替换的次数
print(ret3) #('hhddfgderdgggdmmmd', 5)
ret4 = re.subn('\d+', 'd', 'hhd3567fg8er590ggg0mmm345', 3)print(ret4) #('hhddfgderdggg0mmm345', 3)
三. 切割
split语法 : re.split('正则表达式', '字符串')
s = 'qwerty'lst= s.split('qwerty')print(lst) #['', '']
re1= re.findall('\d+', 'dyudkd34hudslwio987hud22aokd')print(re1) #['34', '987', '22']
ret1 = re.split('\d+','dyudkd34hudslwio987hud22aokd')print(ret1) #['dyudkd', 'hudslwio', 'hud', 'aokd']
re2= re.findall('\d+\w+', '19874ashfk0248')print(re2) #['19874ashfk0248']
ret2 = re.split('\d+\w+', '19874ashfk0248')#匹配到的字符串'19874ashfk0248' 对 源字符串'19874ashfk0248'进行切割,得到两个空字符串
print(ret2) #['', '']#
#re3 = re.findall('\d+(\w+)', '19874ashfk0248')print(re3) #['ashfk0248']
ret3 = re.split('\d+(\w+)', '19874ashfk0248')#正则表达式里有分组时,把匹配的字符串对原字符串切割后,还要显示分组里匹配到的字符串
print(ret3) #['', 'ashfk0248', '']#
#re4 = re.findall('\d+(?:\w+)', '19874ashfk0248')print(re4) #['19874ashfk0248']
ret4 = re.split('\d+(?:\w+)', '19874ashfk0248')print(ret4) #['', '']
四.进阶方法
1. finditer
re.finditre获得的是一个迭代器,取值时节省内存,提高空间效率
2. complie
使用re的一般步骤是先将正则表达式的字符串形式通过complie编译为一个实例对象,然后使用这个实例对象处理文本并获得匹配结果.我们在多次使用一个正则表达式时,complie会帮我们节省很多时间.
语法 : re.complie('正则表达式')
ret = re.compile('\d+')
ret1= ret.findall('1234')
ret2= ret.search('qwer')print(ret1) #['1234']
print(ret2) #None 没有匹配到字符,返回None
五. 分组练习
#把所有的数字给取出来
ret1 = re.findall('-?\d+(?:\.\d+)?', "1-2*(60+(-40.35/5)-(-4*3))")print(ret1) #['1', '-2', '60', '-40.35', '5', '-4', '3']
#把所有整数取出来
ret2 = re.findall('\d+(?:\.\d+)|(\d+)', '1-2*(60+(-40.35/5)-(-4*3))')print(ret2) #['1', '2', '60', '', '5', '4', '3']
ret2.remove('')print(ret2) #['1', '2', '60', '5', '4', '3']
#把'wahaha'里的wahaha取出来
ret3 = re.findall('>(\w+)wahaha')print(ret3) #['wahaha']
#r'(\w+)(\w+)>' r'(\w+)'
ret4 = re.search(r'(\w+)(\w+)>', r'wahaha')print(ret4.group()) #wahaha
#分组命名 : ?P
## r'(\w+)(\w+)>'
ret1 = re.search(r'\w+)>(\w+)(?P=name)>', r'wahaha')#把第一个分组的名字命为name, 两对尖角符<>之间的名字必须一样
print(ret1.group()) #wahaha
print(ret1.group('name')) #a 通过对group方法传分组名字的参数,来获取分组所匹配的字符
#r"\w+\1>"
ret2 = re.search(r'(\w+)(\1)>', r'wahaha')#\1是默认为和第一个分组名字一样
print(ret2.group()) #wahaha
print(ret2.group(1)) #a
六. 爬虫练习
#爬取豆瓣评分前250名电影的信息
importrefrom urllib.request importurlopen#内置的包 来获取网页的源代码 字符串#res = urlopen('http://www.cnblogs.com/Eva-J/articles/7228075.html')#print(res.read().decode('utf-8'))
defgetPage(url):
response=urlopen(url)return response.read().decode('utf-8')def parsePage(s): #s 网页源码
ret =com.finditer(s)for i inret:
ret={"id": i.group("id"),"title": i.group("title"),"rating_num": i.group("rating_num"),"comment_num": i.group("comment_num")
}yieldretdefmain(num):
url= 'https://movie.douban.com/top250?start=%s&filter=' % num #0
response_html = getPage(url) #response_html是这个网页的源码 str
ret = parsePage(response_html) #生成器
print(ret)
f= open("move_info7", "a", encoding="utf8")for obj inret:print(obj)
data=str(obj)
f.write(data+ "\n")
f.close()
com=re.compile('
'.*?(?P.*?).*?(?P.*?)评价', re.S)
count=0for i in range(10): #一共十页
main(count) #count = 0
count += 25
python re模块下载_python: re模块相关推荐
- python xlrd模块下载_python xlrd模块介绍
转载自:http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html 一.安装xlrd模块 到python官网下载 二.使用介绍 1.导入 ...
- python re模块下载_python re模块详解
1.正则表达式基础 1.1正则表达式概念 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...
- python pymysql模块下载_Python Pymysql模块
Python Pymysql的使用 Pymysql的作用 简单来说:pymsql是Python中操作MySQL的模块,就是让我们通过python来实现对数据库的操作的 (1)pymysql模块的下载 ...
- python os模块下载_Python OS模块目录文件处理
Python编程语言优势特点比较突出,在Python语言中,有一种标准模块叫OS模块,Python OS模块包含普遍的操作系统功能,如果你希望你的程序能够与平台无关的话,这个模块尤为重要,它允许一个程 ...
- python pyh模块下载_Python PYH模块 · Seacme Huang
Python生成HTML代码,制作HTML表格 一.pyh模块介绍 1.1 介绍 pyh是一个强大且简约的python模块,你可以使用它在python程序中生成HTML内容. pyh为了这一切提供了非 ...
- python xlrd模块下载_python xlrd模块
一.什么是xlrd模块? Python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 二.使用介绍 1.常用单元格中的数据类型 类型 含义 e ...
- python os模块下载_python os模块
os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作 1.文件操作 build ...
- python安装后如何使用-python如何安装下载后的模块
Python中的内置模块可以直接使用,如os模块,sys模块. 使用第三方模块之前,需要先下载并安装该模块,然后就能像使用标准模块和自定义模块那样导入并使用了.因此,本节主要讲解如何下载并安装第三方模 ...
- 跳一跳python源码下载_Python玩跳一跳【简】
准备环境: Windows 10: [有] 安卓手机 [有] python(版本建议3以上) adb驱动 依赖安装包 Python下载安装[官网下载并安装] 详情参见 pip安装 pip用于安装依赖包 ...
最新文章
- Linux性能调优用这个“必杀技”,稳了!
- db2-存储过程word版
- figure diagram illustrate exemplify profile
- dev layoutview 怎么显示大小_Liunx驱动学习:基于imx6ul 驱动oledssd1306 实现终端显示...
- putty保存用户名和密码_使用PuTTY远程登录软件登录 Linux 实例
- 歪枣网股票数据下载接口汇总一
- 步步为营 .NET三层架构解析 七、UI的设计(登陆页面、注册页页和添加部门页面)...
- 9篇!悉尼科技大学入选CVPR2021都研究什么?
- c语言程序求点坐标在哪个象限,C课后习题
- C# 异步TCP Socket聊天室(1服务器,N客户端)
- 发那科机器人接线电源_电源开关上的L1和L2是不是火线和零线?
- bootstrap4 图标和文字行内对齐
- 【5G通信】基于matlab 5G通信新型多载波技术GFDM【含Matlab源码 106期】
- yum 查看安装的包 包含了哪些文件
- 如何使用smobiler的listview控件实现个人信息修改
- 谈谈键盘A键不定期失灵问题
- 20162327WJH四则运算第二周总结
- 什么是计算机内存?它的用途是什么?
- Python爬取6271家死亡公司数据,一眼看尽十年创业公司消亡史!
- winrar远程代码执行漏洞(cve-2018-20250)