《Python的正则表达式的学习及一个简单案例》
2018-11-30 21:51
274 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43646791/article/details/84668488
今天目标:
这几天学习了正则表达式,在学习的过程中遇到的困难及正则的表达式。
- 了解正则是什么及作用
- 测试工具和查看网站
- 匹配单个字符用什么表示
- 匹配多个字符用什么表示
- 匹配开头结尾用什么表示
- re模块操作
- re模块的高级用法
- 贪婪和非贪婪
- 简单爬虫-批量获取电影下载链接
1.了解正则是什么及作用
1.正则表达式概述
- 规则表达式(一套特殊的规则)
2.正则表达式的作用:
- 验证数据的有效性(查找)
- 替换文本内容
- 从字符串中提取子字符串(爬虫思想)
2.测试工具和查看网站
第一中方法:检查正则表达式是否正确
这是一个测试工具
第二中方法:
[在线正则表达式测试(http://tool.oschina.net/regex/)
3.匹配单个字符用什么表示
表达式 | 描述 |
---|---|
. | 匹配任意单个字符”\n“ |
[ ] | 匹配[ ]中举例的内容 |
[ab] | 匹配 a 或者 b |
[a-z] | 匹配所有的小写字母 |
[A-Z] | 匹配所有的大写字母 |
[0-9] | 匹配所有的数字 |
[a-zA-Z0-9] | 匹配所以小写字母和大写字母和数字 |
表达式 | 描述 |
---|---|
/d | 匹配所有数字 等价[0-9] |
/D | 匹配非数字 |
/s | 匹配空格 |
/S | 匹配非空格 |
/w | 匹配字母,数字,字母,下划线 |
/W | 匹配非字母,数字,字母,下划线 |
3.匹配单个字符用什么表示
表达式 | 描述 |
---|---|
* | 表示前一个字符出现0次或者无限次 |
+ | 表示前一个字符出现1次或者无限次 |
? | 表示前一个字符出现0次或者1次(要不不出现,要不只能出现一次) |
{m} | 表示前一个字符,连续出现m次 |
{m,n} | 连续出现最少m次,最多n次,m一定要小于n |
4.匹配多个字符用什么表示
表达式 | 描述 |
---|---|
^ | 匹配以后一个字符开头 |
^ 有两个作用:
1.匹配以指定字符开头
^在[]外面必须以小写字母,大写字母,数字,下划线开头
2.用在 [] 内部,用于取反
[^he] 匹配不含有 h 和 e 的字符
5.re模块操作
1.re模块的作用:
- python提供的用于正则操作的模块。
2.re模块的使用步骤: - 导包 import re
- 使用match()方法进行检测
- 通过match方法检测
- re.match(“正则表达式”,“要验证和检测的字符串”)
- 举例:
- list = re.match("[a-zA-Z]",“Hello”)
- 取出匹配的具体内容
- print(list.group()) 获取匹配的具体内容
6.re模块的高级用法
search() 在需要匹配的字符串中搜索要匹配的内容
- result = re.search("\d+", “阅读次数:9999”)
知道 match 和 search的区别
-
1.match 从需要检测.group的字符串的开头位置匹配,如果失败返回 None
-
2.search 从需要检测的字符串中搜索满足正则的内容,有则返回match object对象
findall() 在需要匹配的字符串中查找所有满足正则的内容,返回值是列表
- result = re.findall("\d+", “阅读次数:9999,转发次数:6666,评论次数:38”)
sub(“正则表达式”, “新的内容”, “要替换的字符串”) 字符串替换(按照正则,查找字符串并且替换为指定的内容)返回值是替换后的字符串
- result = re.sub("\d+", “10000”, “阅读次数:9999,转发次数:6666,评论次数:38”)
split(“正则表达式”, “待拆分的字符串”) 按照正则拆分字符串,返回值是一个列表
- result = re.split(" “, "info:hello@163.com zhangsan lisi”)
7.贪婪和非贪婪
贪婪:
- 贪婪:默认,表示在满足正则的情况尽可能多的取内容
非贪婪: - 表示在满足正则的情况下,尽可能少的取内容
贪婪的转变为非贪婪: 在 * ? + {} 的后面再加上 ?就可以了 举例:
result = re.match(“aaa(\d+?)”, “aaa123456”)
简单爬虫-批量获取电影下载链接
在这里插入代码片""" 一、定义函数获取列表页的内容页地址 get_movie_links() 1、定义列表的地址 http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html 2、打开url地址,获取数据 3、解码获取到的数据 4、使用正则得到所有的影片内容也地址 二、主函数 main """ import urllib.request import re def get_movie_links(): """获取列表页影片信息""" # 1、定义列表的地址 # http: // www.ygdy8.net / html / gndy / dyzz / list_23_1.html film_list_url = "http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html" # 2、打开url地址,获取数据 reponse_list = urllib.request.urlopen(film_list_url) # 2.1 通过read()读取网络资源数据 response_list_data = reponse_list.read() # 3、解码获取到的数据 response_list_text = response_list_data.decode("GBK") # 4、使用正则得到所有的影片内容地址 # 4.1 使用findall() 根据正则查找所有影片对应的内容页地址 url_list = re.findall(r"<a href=\"(.*)\" class=\"ulink\">(.*)</a>", response_list_text) # 4.2 保存地址 # url_list = [('/html/.......', 'xxx影片'),('/html/.......', 3ff7 'xxx影片')] # print(url_list) # 定义一个字典,用于保存影片信息 films_dict = {} # 4.3 循环遍历 url_list i = 1 for content_url,film_name in url_list: # 拼接内容页地址 content_url = "http://www.ygdy8.net"+content_url # print("影片名称:%s,内容页地址:%s" % (film_name, content_url)) # 4.4 打开内容页地址 response_content = urllib.request.urlopen(content_url) # 4.5 接收内容页数据 # 4.6 读取网络资源 response_content_data = response_content.read() # 4.7 解码得到内容页的文本内容 response_content_text = response_content_data.decode("GBK") # 4.8 取出下载地http://www.ygdy8.net址 # print(response_content_text) result = re.search(r"bgcolor=\"#fdfddf\"><a href=\"(.*?)\">", response_content_text) # print(result.group(1)) # 字典 # {"xxxx影片": "xxx地址"} films_dict[film_name] = result.group(1) print("已经获取%d条信息" % i) i += 1 return films_dict def main(): """""" films_dict = get_movie_links() # print(films_dict) # 把字典遍历输出 for film_name,film_link in films_dict.items(): print("%s | %s" % (film_name, film_link)) if __name__ == '__main__': main()
相关文章推荐
- Python简单学习(lecture6)面向对象、标准库、正则表达式(前面未写!!)
- python正则表达式简单爬虫入门+案例(爬取猫眼电影TOP榜)
- python 正则表达式简单学习记录
- Python正则表达式的简单学习
- python学习之正则表达式练习:编写一个计算器
- 记录一下学习历程正则表达式表单验证一个小案例
- 请尝试写一个验证Email地址的正则表达式。版本一应该可以验证出类似的Email —— python学习笔记
- 一个简单的java正则表达式例子
- Python中re(正则表达式)模块学习
- 自己动手写一个简单正则表达式解析器(待续,未完成)
- Python学习笔记 第二部分 - 正则表达式 与 爬虫小实例(抓取豆瓣电影中评分大于等于8分的影片)
- 分享一个java正则表达式学习的链接
- python 学习笔记 10 -- 正则表达式
- Python模块学习 re 正则表达式
- python正则表达式学习
- JS正则表达式学习二:简单的email验证看正则表达式的语法
- python Django 学习笔记(二)—— 一个简单的网页
- Java中正则表达式的一个简单例子
- 基于python的正则表达式学习笔记
- Python 学习入门(13)—— 正则表达式