一、字符组

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--正则表达式的更多相关文章

  1. python基础之正则表达式

    正则表达式语法 正则表达式 (或 RE) 指定一组字符串匹配它;在此模块中的功能让您检查一下,如果一个特定的字符串匹配给定的正则表达式 (或给定的正则表达式匹配特定的字符串,可归结为同一件事). 正则 ...

  2. Python基础之 正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  3. Python系列之正则表达式详解

    Python 正则表达式模块 (re) 简介 Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用 ...

  4. 【转载】Python中的正则表达式教程

    本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. ...

  5. Python中的正则表达式教程

    本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. ...

  6. 十七. Python基础(17)--正则表达式

    十七. Python基础(17)--正则表达式 1 ● 正则表达式 定义: Regular expressions are sets of symbols that you can use to cr ...

  7. python模块 re模块与python中运用正则表达式的特点 模块知识详解

    1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...

  8. Python高手之路【五】python基础之正则表达式

    下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...

  9. python之(re)正则表达式上

    python正则表达式知识预备 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \\\\ "表 ...

  10. Python::re 模块 -- 在Python中使用正则表达式

    前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...

随机推荐

  1. springMVC学习之路2-文件上传

    springMVC的上传文件方式一共有两种,下面听我简单介绍一下: 1.1 首先配置springAnnotation-servlet.xml,新增一个multipartResolver处理器,并定义默 ...

  2. Linux+Jenkins环境搭建

    一.安装基础环境 1. yum -y install java-1.8.0-openjdk.x86_64 #安装1.8jdk 2. 查看java 版本 [root@localhost djanggo_ ...

  3. Linux 系统最大TCP连接数 调优

    Linux系统TCP最大连接数 Linux系统可接连接到最大的TCP连接数,高并发情况下可进行扩展加大,最大为65536. 限制最大TCP连接数 修改文件:/etc/sysctl.conf 生效命令: ...

  4. GDB in Action

    GDB in Action 入门 编译 gcc -g -O0 -o word2vec.c word2vec -g 选项:要求 gcc 编译器保留调试符号信息. -O0 选项表示不优化,从 O1 ~ O ...

  5. JS设计模式(1)单例模式

    什么是单例模式 定义:1.只有一个实例.2.可以全局访问 主要解决:一个全局使用的类频繁地创建与销毁. 何时使用:当您想控制实例数目,节省系统资源的时候. 如何解决:判断系统是否已经有这个单例,如果有 ...

  6. 分类统计的controller和service

    SpringMVC框架下的 部分代码: Controller控制器: @Resource ReviewTitleService reviewTitleService;//调用ReviewTitleSe ...

  7. Mybatis自动生成,针对字段类型为text等会默认产生XXXXWithBlobs的方法问题

    需要修改generatorConfiguration.xml,里面的table加属性:<table tableName="t_ticketcase" domainObject ...

  8. 【Python】【内置函数】

    [fromkeys()] -- coding: utf-8 -- python 27 xiaodeng python之函数用法fromkeys() fromkeys() 说明:用于创建一个新字典,以序 ...

  9. Java核心技术梳理-泛型

    一.引言 在学习集合的时候我们会发现一个问题,将一个对象丢到集合中后,集合并不记住对象的类型,统统都当做Object处理,这样我们取出来再使用时就得强制转换类型,导致代码臃肿,而且加入集合时都是以Ob ...

  10. Dagger2

    一.理解Dagger2原理 原文链接 二.Dagger2例子实战 原文链接 Demo地址 注:关于错误:IncompleteAnnotationException: dagger.Provides m ...