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表达式的语法和详细 ...
随机推荐
- 颜色扩展类--ColorExtensions
/// <summary> /// 颜色扩展类 /// </summary> public static class ColorExtensions { /// <sum ...
- LinkedList 利用的是尾插法
- PHP 订单延时处理:延迟队列(未鉴定)
PHP 订单延时处理:延迟队列: https://github.com/chenlinzhong/php-delayqueue
- Git命令git update-index --assume-unchanged,忽略不想提交的文件(忽略跟踪)
场景 我们在自己的私有测试分支上调试项目逻辑,给文件做了一些特定的修改,但是文件不想被git提交,不想执行git status命令时出现在modified列表里:再比如,我们本地的数据库和测试环境的数 ...
- Linux 系统级开启文件句柄 调优
系统级开启文件句柄 max-file系统级别的能够打开的文件句柄的数量,Centos7默认是794168. Max-file 与 ulimit -n 的区别 max-file 表示系统级别的能够打开 ...
- 主从复制跳过错误(未采用GTID)
DB:5.6.15 主从库没有采用GTID 案例1:从库对象不存在mysql> show slave status \G;*************************** 1. row * ...
- 【Alpha】Scrum Meeting 1
前言 第1次会议在3月17日由PM在教一317召开. 主要确定了选题,并对目标进行了初步的确定.时长90min. 任务分配 姓名 当前阶段任务 下阶段任务 吴昊 确定项目方向,本地部署代码,完成团队介 ...
- oracle的存储过程的作用
oracle的存储过程的作用 1.存储过程可以使得程序执行效率更高.安全性更好,因为过程建立之后 已经编译并且储存到数据库,直接写sql就需要先分析再执行因此过程效率更高,直接写sql语句会带来安全性 ...
- 线性回归(linear regression)
基本形式 最小二乘法估计拟合参数 最小二乘法:基于均方误差最小化来进行模型求解的方法称为“最小二乘法”(least square method) 即(左边代表 $\mathbf{\omega }$ 和 ...
- C# winform 选择文件保存路径
1.winform 点击按钮选择文件保存的路径,效果如下图: 具体代码如下: private void button8_Click(object sender, EventArgs e) { Fold ...