一、 正则表达式

使用python的re模块之前应该对正则表达式有一定的了解

正则表达式是对字符串操作的一种逻辑公式。我们一般使用正则表达式对字符串进行匹配和过滤。

正则的优缺点:

优点:灵活, 功能性强, 逻辑性强.

缺点:上手难,但一旦学会这东西非常好用

# 正则表达的组成:普通字符、元字符、限定符

普通字符不用说的,就是常用的字母,数字,汉字这些

##贪婪匹配

.*    点星 表示尽可能多的匹配

## 惰性匹配

.*?  点星问号 尽可能少的匹配

##  转义

对 “\” 进行转义可以用 “\\” ,也可以在字符串开头加上r

## () 表示分组,括号内的表达式是一个整体     如果一个表达式中有分组,那么()后面的 \1 表示拿前边组的匹配结果

二、re模块

re模块是python提供的一套关于处理正则表达式的模块. 核心功能有四个:

re.search()      #搜索,搜到结果就返回,没有结果返回None

re.match()       #只能从头开始匹配  相当于默认加了^

re.findall()       #返回所有匹配项

re.finditer()      #返回所有匹配项的迭代器

 import re

 # 搜索,搜到结果就返回
ret = re.search("a","alex")
print(ret.group()) #结果要用group来取 #从头开始匹配,匹配到就返回
a = re.match('回','回眸一笑百媚生') #相当于匹配 ^a 默认加了开头符
print(a.group()) #返回所有匹配项 列表
lst =re.findall('a','alexa')
print(lst) #返回一个迭代器
ret = re.finditer('a','alexa')
for el in ret:
print(el.group())
print(el)

核心操作

##其他操作

re.split()      #根据正则表达式进行切割

re.split("(表达式)","str")      #切割后保留切割的内容

re.sub()   #替换

re.subn()    #替换    返回的是一个元组

re.compile(表达式, re.S)   #把正则表达式预加载    参数re.S能让惰性匹配忽略换行

注意:

在re中()的优先级比较高,会优先返回括号内匹配的内容

(?:)    在括号里加?:表示取消优先级

(?P<name>)       这样是给()匹配的内容命名

 #() 表优先级
b = re.findall(r'www\.(baidu|oldboy)\.com','www.baidu.com')
print(b) # ?:取消()优先级
c = re.findall(r'www.(?:baidu|oldboy).com','www.baidu.com')
print(c) #切割
ret = re.split('[ab]','github is a good websit')
print(ret) ret = re.split('([ab])','github is a good websit')
print(ret) #替换
ret = re.sub('good','well','github is a good website')
print(ret)
ret = re.subn('g','G','github is a good website')
print(ret) #预加载
a = re.compile(r'anala\b') # 正则中\b表示匹配结尾是什么什么
print(a)
ret = a.search('lexahanala')
print(ret.group()) #给组起名字
obj = re.compile(r'alex(?P<name>\d+)and(w)')
res = obj.search("alex250andwusir38ritian2")
print(res.group())
# for el in res.group():
# print(el)
print(res.group(2))
print(res.group('name'))

其他操作

 #豆瓣排行top250

 from urllib.request import urlopen
import re #预加载正则表达式
obj = re.compile(r'<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?导演: (?P<director>.*?)&nbsp;&nbsp;&nbsp;.*?<span class="rating_num" property="v:average">(?P<fen>.*?)</span>',re.S)
#获取网页内容
def getContent(url):
content = urlopen(url).read().decode('utf-8')
return content #解析内容
def parseContent(content):
it = obj.finditer(content)
for el in it:
yield {
"电影名":el.group("name"),
"导演": el.group('director'),
"评分":el.group('fen')
} for i in range(10):
url = 'https://movie.douban.com/top250?start=%s&filter=' %(i*25)
g = parseContent(getContent(url))
f = open('douban.txt', mode='a', encoding='utf-8')
for el in g :
f.write(str(el)+'\n')
f.close()

练习

python记录_day23 正则表达式 re模块的更多相关文章

  1. python基础之正则表达式 re模块

    内容梗概: 1. 正则表达式 2. re模块的使⽤ 3. 一堆练习正则表达式是对字符串串操作的一种逻辑公式. 我们一般使用正则表达式对字符串进行匹配和过滤.使用正则的优缺点: 优点: 灵活,功能性强, ...

  2. python中的正则表达式--re模块

    参考博客:https://www.cnblogs.com/tina-python/p/5508402.html 这里说一下python的re模块即正则表达式模块,先列出其中涉及到的各种字符和模式等: ...

  3. python之路 正则表达式,模块导入的方法,hashlib加密

    一.正则表达式re python中re模块提供了正则表达式相关操作 字符: . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的 ...

  4. python学习之正则表达式,StringIO模块,异常处理,搭建测试环境

    python正则表达式 引入一个强大的匹配功能来匹配字符串 import re 正则表达式的表示类型raw string类型(原生字符串类型) r'sa\\/sad/asd'用r转为raw strin ...

  5. Python:笔记(6)——正则表达式

    Python:笔记(6)——正则表达式 re模块 re模块用于在字符串中执行基于正则表达式模式的匹配和替换. 使用原始字符串 正则表达式使用 \ 对特殊字符进行转义,比如,为了匹配字符串 ‘pytho ...

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

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

  7. python的re正则表达式模块学习

    python中re模块的用法   Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...

  8. Python标准库之核心模块学习记录

    内建函数和异常 包括__builtin__模块和exceptions模块 操作系统接口模块 包括提供文件和进程处理功能的os模块,提供平台独立的文件名处理(分拆目录名,文件名,后缀等)的os.path ...

  9. python正则表达式Re模块备忘录

    title: python正则表达式Re模块备忘录 date: 2019/1/31 18:17:08 toc: true --- python正则表达式Re模块备忘录 备忘录 python中的数量词为 ...

随机推荐

  1. (转载)Windows下小狼毫输入法(Rime)的安装与配置(含导入搜狗词库)

    div id="cnblogs_post_body" class="blogpost-body"> 最近彻底烦透了搜狗拼音输入法的各种流氓行为,自动升级不 ...

  2. 正则解析json数据

    http://tool.chinaz.com/regex http://tool.oschina.net/regex/

  3. mutect/mutsig/gistic官网汇总

    http://software.broadinstitute.org/software/cprg/

  4. Money 20/20 | 未来金融数字化转型:数字化半径与全栈式战略观

    小蚂蚁说: 近年来,国际和国内的领先银行纷纷全力投入数字化转型.IDC去年报告说,全球1000大企业里面,67%已经把数字化转型定为企业级战略,而决定数字化转型成功与否的是人的思想改变.我们用数字化半 ...

  5. mac的终端怎么退出git:(master)

    今天在终端误操作,在主目录下执行git init命令,结果杯具了, 总是出现这个提示. 各种搜索解决方案,终于退出了. 方法如下: 删掉.git目录: rm -rf ~/.git

  6. java stackoverflowerror与outofmemoryerror区别(转)

    1.stackoverflow: 每当java程序启动一个新的线程时,java虚拟机会为他分配一个栈,java栈以帧为单位保持线程运行状态:当线程调用一个方法是,jvm压入一个新的栈帧到这个线程的栈中 ...

  7. 【SQL Prompt】SQL Prompt7.2下载及破解教程

    基本介绍 SQL Prompt能根据数据库的对象名称,语法和用户编写的代码片段自动进行检索,智能的为用户提供唯一合适的代码选择.自动脚本设置为用户提供了简单的代码易读性--这在开发者使用的是不大熟悉的 ...

  8. ORA-03113: end-of-file on communication channel(归档满处理方法)

    归档放在flash_recovery目录,由于归档占满了闪回目录,数据库启动报错ORA-03113: end-of-file on communication channel tail -1200f ...

  9. datagrid数据表格当数据为0的时候页面不显示数据

    如下图: datagrid数据表格当数据为0的时候页面不显示数据,为空的表格数据全是0,但是页面无法显示 传递的json数据也是没问题的: 所以实在想不通,为什么easyUI datagrid 不显示 ...

  10. jenkins之从0到1利用Git和Ant插件打war包并自动部署到tomcat(第三话):创建一个自由风格的项目(非maven),实现自动打war包

    上一节把git和ant安装在虚拟机,并在jenkins上做了相关配置,接下来就可以真正开始构建一个项目了 1.新建一个自由风格的项目,因为是用ant打包,所以不要选择构建maven项目 2.配置源码管 ...