python day 25--正则表达式
一、字符组
1.[0-9]表示匹配0-9中的数字
2.[a-z]表示匹配a-z之间的字母
3.[A-Z]表示匹配大写的字母
4.[0-9a-zA-Z]匹配所有字母数字
二、元字符
1.\d 匹配任意数字
2.\w 匹配字母数字下划线
3.\s 匹配任意空字符
4. \n 匹配换行符
5.\t 匹配制表符
6. .(点)匹配除换行符之外的任意字符
7.\D 匹配除数字之外的任意字符
8. \W 匹配除字母数字下划线之外的任意字符
9.\S 匹配非空字符
10.a|b,匹配符合a或b的字符,当条件有重叠时,应该把范围广的放在左边。
11.(),分组匹配,一般搭配RE模块中的findall,search使用表示优先匹配。
12.[...] 匹配字符组中的字符
13 [^...] 匹配除字符组外的字符
三、量词
1.* 表示匹配0-无穷次的字符
2. + 匹配1-无穷次的字符
3. ?表示重复0次或一次,在量词的后面跟了一个 ? 表示取消贪婪匹配 :.*?跟上字符表示匹配任意字符知道找到符合条件的字符就不在找。
4.{n}表示前面的重复n次
5.{n,}表示至少重复n次
6.{n,m}表示重复n-m次,但是以匹配数量多的优先
四、转义符
在python中\有特殊意义,比如\n表示换行,如果要匹配‘\n’需要在前面加上\,就是'\\n'。如果要匹配‘\\n’,就是‘\\\\n’两个\\。如果有多个\\就要加几个\\会有点麻烦,所以只需要在前面加r',r'\n就可以了。
五、re模块的常用方法
1. findall
- import re
- # ret = re.findall('-0\.\d+|-[1-9]\d*(\.\d+)?','-1asdada-200')#前面是正则表达式,后面是待匹配的字符
- ret = re.finditer('\d', 'ds3sy4784a') #finditer返回一个存放匹配结果的迭代器
- # ret1 = re.findall('www.(oldboy).com','www.oldboy.com')#会优先匹配括号里的正则表达式,结果:oldboy,(:?oldboy):?表示取消优先匹配
- # print(ret)#返回列表
2.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))
- #search可以节省内存,但是打印时要加上.group(),(1)表示显示第一个,不加数字表示显示全部
3.spilt
- # ret = re.split('\d+','alex83egon20taibai40')
- # print(ret)
按照匹配到的结果进行切割
4.分组命名
- # 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'))
- ?P<名字>,可以给匹配到的内容命名,这样.group(名字),可以输出指定名字的内容
5.爬虫练习
- import re
- from urllib.request import urlopen
- # 内置的包 来获取网页的源代码 字符串
- # res = urlopen('http://www.cnblogs.com/Eva-J/articles/7228075.html')
- # print(res.read().decode('utf-8'))
- def getPage(url):#请求内容
- response = urlopen(url)
- return response.read().decode('utf-8')
- def parsePage(s): # 获取 网页源码
- com = re.compile(
- '<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>\d+).*?<span class="title">(?P<title>.*?)</span>'
- '.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>', re.S)
- ret = com.finditer(s)#节省内存
- for i in ret:
- ret = {
- "id": i.group("id"),
- "title": i.group("title"),
- "rating_num": i.group("rating_num"),
- "comment_num": i.group("comment_num")
- }
- yield ret
- def main(num):
- url = 'https://movie.douban.com/top250?start=%s&filter=' % num #
- response_html = getPage(url) # response_html是这个网页的源码 str
- ret = parsePage(response_html) # 生成器
- print(ret)
- f = open("move_info7", "a", encoding="utf8")
- for obj in ret:
- print(obj)
- data = str(obj)
- f.write(data + "\n")
- f.close()
- com = re.compile(
- '<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>\d+).*?<span class="title">(?P<title>.*?)</span>'
- '.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>', re.S)
- count = 0
- for i in range(10):
- main(count) # count = 0
- count += 25
python day 25--正则表达式的更多相关文章
- python基础之正则表达式
正则表达式语法 正则表达式 (或 RE) 指定一组字符串匹配它;在此模块中的功能让您检查一下,如果一个特定的字符串匹配给定的正则表达式 (或给定的正则表达式匹配特定的字符串,可归结为同一件事). 正则 ...
- Python基础之 正则表达式指南
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- Python系列之正则表达式详解
Python 正则表达式模块 (re) 简介 Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用 ...
- 【转载】Python中的正则表达式教程
本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. ...
- Python中的正则表达式教程
本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. ...
- 十七. Python基础(17)--正则表达式
十七. Python基础(17)--正则表达式 1 ● 正则表达式 定义: Regular expressions are sets of symbols that you can use to cr ...
- python模块 re模块与python中运用正则表达式的特点 模块知识详解
1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...
- Python高手之路【五】python基础之正则表达式
下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...
- python之(re)正则表达式上
python正则表达式知识预备 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \\\\ "表 ...
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
随机推荐
- java之导入excel
接口: /** * * Description: 导入excel表 * @param map * @param request * @param session * @return * @author ...
- Linux(5.5版为主)的基本操作命令
mount 查看挂载目录 cat ~ 查看文件下的内容 touch ~ 创建一个文件 一次性性创建几个文件: touch /tmp/{1,2,3,4}.txt ...
- hisicv200 exfat支持
由于项目中需要128Gsd卡支持.所以内核里面需要支持exfat 1.exfat 由于版权问题,所以linux kernel一直都没法支持,由于某些公司在linux kernel 3.9版本开源exf ...
- Python 多进程基本语法
需求: 在有多线程的情况下,我们可以使用线程帮我们处理一些事情,但是在python这里 由于RSA锁的缘故,我们只能够用到一个cpu帮我们处理事情,一个cpu在处理多个线程时,是通过上下文的切换使我 ...
- redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: 断开的管道 (Write failed)
昨晚,包发到测试环境中,出现redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: 断开的 ...
- linux的必知必会规则
- 主从复制跳过错误(未采用GTID)
DB:5.6.15 主从库没有采用GTID 案例1:从库对象不存在mysql> show slave status \G;*************************** 1. row * ...
- maven 执行testng.xml文件失败解决问题
在pom.xml中配置了testng的依赖后,在surefire-plugin中又配置了suitexmlfiles指向testng.xml文件,但是使用mvn test运行时,没有运行testng.x ...
- Always clear download 下载 谷歌浏览器插件
由于该博文不支持上传压缩包,因此,如有需要always clear download插件的可点击此链接在百度网盘上下载https://pan.baidu.com/s/13wWchis3iKqXkIA5 ...
- Oracle11g导出为Oracle10g版本数据,解决10g不兼容11g文件
EXPDP USERID='JCSJ/JCSJ@FZBD' schemas=JCSJ directory=bac_file dumpfile=JCSJ.dmp logfile=JCSJ.log ver ...