1.正则表达式,匹配字符串
正则表达式是对字符串操作的一种逻辑公式.我们一般使用正则表达式对字符串镜子那个匹配和过滤,使用正则的优缺点:
优点: 灵活,功能性强,逻辑性强
缺点: 上手难.一旦上手,会爱上这个东西
工具:各大文本编辑器一般都有增则匹配功能.我们也可以去http://tool.chinaz.com/regex/进行在线测试
元字符:
.    匹配除换行符以外的任意字符
\w  匹配字母数字或下划线
\s   匹配任意的空白符
\d  匹配数字
\n  匹配一个换行符
\t   匹配一个制表符
\b  匹配一个单词的结尾
^  匹配字符串的开始
$   匹配字符串的结尾
\W 匹配非字母或数字或下划线
\D  匹配非数字
\S  匹配非空白符
a|b  匹配字符a或字符b
( )   匹配括号内的表达式,也表示一个组
[...]  匹配字符组的字符
[^...]  匹配除字符组中字符的所有字符
量词:
*重复零次或更多次
+  重复一次或更多次
?  重复零次或一次
{n} 重复n次
{n, } 重复n次或更多次
{n,m}  重复n到m次
贪婪匹配和惰性匹配
    贪婪匹配: .*   .+
    惰性匹配: .*?  尽可能少的匹配
转义:
    \\\\n => \\n => \n
 在前面添加r,原样输出
分组:   使用()
在python中使用正则.re
    <?P<name>正则>
    re模块是python提供的一套关于处理正则表达式的模块,核心功能有四个:
findall()  查找所有,返回list
finditer() 查找返回,返回的是迭代器,
search()   搜索. 搜索到第一个结果返回
match()   匹配. 收到一个结果返回,从头开始匹配
compile( )  编译
group('name')  获取数据
re.S  干掉 . 的换行
# re的工作是在python中执行正则表达式
import re
 
# find
result = re.findall("\d+", "baby的电话号是: 185123456789")
print(result)     #['185123456789']
 
it = re.finditer("\d+", "baby123456789的电话号是: 185123456789")
for el in it:
    print(el.group()) # 分组   #123456789
                              #185123456789
 
 
search 搜索, 查找
一旦匹配到结果. 直接返回, 如果匹配不到结果. 返回None
result = re.search("\d", "宝宝的电话是111")
print(result)       #<_sre.SRE_Match object; span=(6, 7), match='1'>
print(result.group())     #1
 
匹配, 从头开始匹配. 相当于在你正则前面加了一个^
result = re.match("\d+", "157宝宝的电话是:")
print(result.group())    ###157
 
search和match的区别:  search查找. 找到了结果就返回. match. 从头开始匹配.
 
# 坑: 爬虫的一个重点
# .*?
result = re.finditer(r"姓名:(?P<name>.*?), 爱好:(?P<hobby>.*?),", "姓名:宝宝, 爱好:女,")
for el in result:
    print(el.group("name"), el.group("hobby"))
 
 
# 正则的常用操作
result = re.split("\d+", "宝宝110来找你了. 你回头收拾收拾去119报道")
print(result)
 
用正则替换
s = re.sub("\d+", "__sb__", "宝宝110来找你了. 你回头收拾收拾去119报道")
print(s)
 
s = re.subn("\d+", "__sb__", "宝宝110来找你了. 你回头收拾收拾去119报道") # 替换了xxx次
print(s)
 
code = "for i in range(10): print(i)"
 
c = compile(code, "", "exec") # 编译
 
exec(c) # 快速执行
 
reg = re.compile(r"\d+") # 编译了一段正则. 加载了一段正则
lst = reg.findall("呵呵, 宝宝才不去110呢.他要去120了")
print(lst)
 
re.findall(r"\d+", "呵呵, 宝宝才不去110呢.他要去120了")
 
lst = re.findall(r"a(?:\d+)c", "a123456c") # 把括号python中的分组变成了原来正则表达式中的分组
print(lst)
爬取电影天堂
# 爬取电影天堂
from urllib.request import urlopen
 
content = urlopen("https://www.dytt8.net/html/gndy/dyzz/20181219/57954.html").read().decode("gbk")
# print(content)
 
reg = r'<div id="Zoom">.*?片  名(?P<name>.*?)<br />◎年  代(?P<years>.*?)<br />.*?◎上映日期(?P<date>.*?)<br />'+ \
'.*?◎主  演(?P<main>.*?)◎简  介.*?<td style="WORD-WRAP: break-word" bgcolor="#fdfddf"><a href="(?P<download>.*?)">'
 
it = re.finditer(reg, content, re.S) # re.S 去掉.里面的\n
 
for el in it:
    print(el.group("name"))
    print(el.group("years"))
    print(el.group("date"))
    print(el.group("main").replace("<br />      ", ", "))
    print(el.group("download"))
 

day 24 内置模块re的更多相关文章

  1. Python基础篇【第5篇】: Python内置模块(二)

    内置模块 1. OS os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell ...

  2. python基础知识9——模块2——常见内置模块

    内置模块 内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 1.sys 用于提供对Python解释器相关的操作: sys.argv 命令行参数List,第一个元素 ...

  3. python(八)内置模块logging/os/time/sys/json/pickle

    模块 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少 ...

  4. python内置模块(4)

    这一部分是python内置模块系列的最后一部分,介绍了一些小巧有用的内置模块. 目录: 1.random 2.shelve 3.getpass 4.zipfile 5.tarfile 6.bisect ...

  5. python内置模块(1)

    Python的模块在其它语言中通常称为库或类库,也就是lib.它是编程语言的第三级封装,第四级则是包,也就是模块的打包组合,而前两级分别是函数和类.封装的好处,自然不用多言,高内聚,松耦合,减少代码重 ...

  6. python成长之路第三篇(4)_作用域,递归,模块,内置模块(os,ConfigParser,hashlib),with文件操作

    打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.作用域 2.递归 3.模块介绍 4.内置模块-OS 5.内置模块-ConfigParser 6.内置模块-has ...

  7. Python爬虫与数据分析之模块:内置模块、开源模块、自定义模块

    专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...

  8. Nginx内置模块简介

    经常编译Nginx的时候看到./configure后面跟着很多--with命令,虽然知道是添加模块,但一直也没有仔细去研究这些模块究竟是什么作用.本文会对常用的内置模块做个简单介绍,方便后续检索查看. ...

  9. python全栈开发 * 24 知识点汇总 * 180705

    24 模块-------序列化一.什么是模块 模块:py文件就是一个模块.二.模块的分类:(1)内置模块 (登录模块,时间模块,sys模块,os模块)(2)扩展模块 (itchat 微信有关,爬虫,b ...

随机推荐

  1. 3.用less浏览文件内容

    less 命令是一个用来浏览文本文件的程序.纵观 Linux 系统,有许多人类可读的文本文件.less 程序为我们检查文本文件 提供了方便. 什么是“文本” 在计算机中,有许多方法可以表达信息.所有的 ...

  2. android测试Code

    <!--android:layout_alignParentTop="true"--><com.koooke.platform.View.CenterImage ...

  3. xml布局显示需要预判断,可是还没有show出来,怎么办?

    最近在实际工作中遇到了一种情况,写一个音量条,音量条显示出来之前要判断系统的音量大小,然后给音量条设置显示的位置.解决办法有两种, 第一种:    m_pHostThread>MsgAsyncC ...

  4. linux下 signal信号机制的透彻分析与各种实例讲解

    转自:http://blog.sina.com.cn/s/blog_636a55070101vs2d.html 转自:http://blog.csdn.net/tiany524/article/det ...

  5. 404错误 标签: servlet浏览器 2016-11-16 16:58 61人阅读 评论(0) 收藏

    404是资源没有找到,一般由于以下几个方面导致: 1.路径出错: a)检查web.xml中servlet的配置是否出错 b)浏览器访问是路径书写方式:http://localhost:8080/项目名 ...

  6. Nginx配置虚拟机,url重写,防盗链

    配置目录: ·     虚拟主机 ·     PHP支持 ·     URL重写 ·     防止盗链 ·     持续更新… 一.虚拟主机 1.创建 文件格式:{域名}.conf 具体如下: $ s ...

  7. codeforces793 B. Igor and his way to work (dfs)

    题目链接:codeforces793 B. Igor and his way to work (dfs) 求从起点到终点转方向不超过两次是否有解,,好水啊,感觉自己代码好搓.. #include< ...

  8. 【[USACO13NOV]没有找零No Change】

    其实我是点单调队列的标签进来的,之后看着题就懵逼了 于是就去题解里一翻,发现楼上楼下的题解说的都好有道理, f[j]表示一个再使用一个硬币就能到达i的某个之前状态,b[now]表示使用那个能使状态j变 ...

  9. php模板引擎的原理与简单实例

    模板引擎其实就是将一个带有自定义标签的字符串,通过相应的规则解析,返回php可以解析的字符串,这其中正则的运用是必不可少的,所以要有一定的正则基础.总体思想,引入按规则写好的模板,传递给标签解析类(_ ...

  10. 数据元&数据字典&元数据

    1. 数据元 data element(数据元素),单个数据单元,是数据的基本单位.参阅data field(数据字段). 2. 元数据 首先,我们举个例子来看看什么叫做“元”,在后现代主义文学中有一 ...