在Python中可以使用正则表达式, Python提供re模块,包含所有正则表达式的功能。由于Python的字符串本身也用\转义,所以要特别注意:在字符串的前面加上 r 的前缀, 就不用考虑转义的问题了.

s1 = 'djioi\ndjj' #\n 表示换行

print(s1)#djioi#djj

s2= r'djioi\ndjj' #字符串前加个r 就不用考虑转义的问题了.

print(s2) #djio

python的re模块提供了很多种有关正则表达式的方法

一 . 匹配

1. findall

语法 :   re.findall('正则表达式', '字符串')

importre

ret= re.findall('\d+', '19874ashfk0248') #匹配数字,数字的长度至少为1

print(ret) #返回值为列表#['19874', '0248']

当正则表达式里有分组()时, 会优先显示分组里匹配的字符串,无论分组有没有匹配到,没有匹配到则为空字符串' ', 可以在分组里的第一个位置加上 '?:' ,就会取消分组的优先显示特权.

ret2 = re.findall('\d+(\w+)', '19874ashfk0248')print(ret2) #['ashfk0248']

ret3= re.findall('(-)?\d+', '78543')print(ret3) #['']

ret2 = re.findall('\d+(?:\w+)', '19874ashfk0248') #在分组里加入 ?:

print(ret2) #['19874ashfk0248']

ret3= re.findall('(?:-)?\d+', '78543')print(ret3) #['78543']

2. search

语法 :   search('正则表达式', '字符串')

ret1 = re.search('\d+', '19874ashfk0248')print(ret1) #

print(ret1.group()) #19874

ret3 = re.search('\d', 'shuyuiiuus')print(ret3) #None 没有匹配上的字符时,会返回None#print(ret3.group()) # 报错: 'NoneType' object has no attribute 'group'

当正则表达式里有分组()时,group()可以传数字来显示第几个分组匹配的值, 数字为0或没有时,表示显示匹配所有的值.

ret2 = re.search('(\d+)(\w+)(\d+)', '19874ashfk0248')print(ret2.group()) #19874ashfk0248

print(ret2.group(0)) #19874ashfk0248

print(ret2.group(1)) #19874

print(ret2.group(2)) #ashfk024

print(ret2.group(3)) #8

3. match

语法 :  re.match('正则表达式', '字符串')

ret1 = re.match('\d+', '786jhg032')print(ret1) #

print(ret1.group()) #786

ret2= re.match('\d+', 'kt786jhg032')#字符串的第一个不是数字,match里的正则表达式自带开始符: ^ ,所以字符串的第一个字符必须是数字才能匹配上.

print(ret2) #None#print(ret2.group()) # 报错: 'NoneType' object has no attribute 'group'

4. finditer

语法 : re.finditer('正则表达式', '字符串')

ret1 = re.finditer('\d+', '786jhg032te654') #ret1是个迭代器

print(ret1) #

print(ret1.__next__().group()) #786

print(ret1.__next__().group()) #032

print(ret1.__next__().group()) #654

总结 findall, search, match, finditer 的区别 :

findall : 在string中查找所有 匹配成功的组, 即用括号括起来的部分, 返回list对象, 每个列表元素是由每个匹配的所有组组成的list.

search : 在string中进行搜索,成功返回object, 失败返回None, 只匹配一个。

match : 匹配string 开头,成功返回object, 失败返回None,只匹配一个。

finditer : 在string中查找所有 匹配成功的字符串, 返回iterator,每个元素是一个object。

二. 替换

1. sub

语法 : re.sub('正则表达式',  '替换的元素', '字符串', 次数)

ret1 = re.sub('\d+', 'h', 'dguj23kk321jjjj222kkkk111', 2) #把字符串里匹配到的的数字替换成 'h', 只替换2次

print(ret1) #dgujhkkhjjjj222kkkk111

ret2 = re.sub('\d+', 'h', 'dguj23kk321jjjj222kkkk111') #没有替换次数,默认全部替换

print(ret2) #dgujhkkhjjjjhkkkkh

2. subn

语法 : re.subn('正则表达式',  '替换的元素', '字符串', 次数)

ret3 = re.subn('\d+', 'd', 'hhd3567fg8er590ggg0mmm345') #subn会返回替换的次数

print(ret3) #('hhddfgderdgggdmmmd', 5)

ret4 = re.subn('\d+', 'd', 'hhd3567fg8er590ggg0mmm345', 3)print(ret4) #('hhddfgderdggg0mmm345', 3)

三. 切割

split语法 :  re.split('正则表达式', '字符串')

s = 'qwerty'lst= s.split('qwerty')print(lst) #['', '']

re1= re.findall('\d+', 'dyudkd34hudslwio987hud22aokd')print(re1) #['34', '987', '22']

ret1 = re.split('\d+','dyudkd34hudslwio987hud22aokd')print(ret1) #['dyudkd', 'hudslwio', 'hud', 'aokd']

re2= re.findall('\d+\w+', '19874ashfk0248')print(re2) #['19874ashfk0248']

ret2 = re.split('\d+\w+', '19874ashfk0248')#匹配到的字符串'19874ashfk0248' 对 源字符串'19874ashfk0248'进行切割,得到两个空字符串

print(ret2) #['', '']#

#re3 = re.findall('\d+(\w+)', '19874ashfk0248')print(re3) #['ashfk0248']

ret3 = re.split('\d+(\w+)', '19874ashfk0248')#正则表达式里有分组时,把匹配的字符串对原字符串切割后,还要显示分组里匹配到的字符串

print(ret3) #['', 'ashfk0248', '']#

#re4 = re.findall('\d+(?:\w+)', '19874ashfk0248')print(re4) #['19874ashfk0248']

ret4 = re.split('\d+(?:\w+)', '19874ashfk0248')print(ret4) #['', '']

四.进阶方法

1. finditer

re.finditre获得的是一个迭代器,取值时节省内存,提高空间效率

2. complie

使用re的一般步骤是先将正则表达式的字符串形式通过complie编译为一个实例对象,然后使用这个实例对象处理文本并获得匹配结果.我们在多次使用一个正则表达式时,complie会帮我们节省很多时间.

语法 : re.complie('正则表达式')

ret = re.compile('\d+')

ret1= ret.findall('1234')

ret2= ret.search('qwer')print(ret1) #['1234']

print(ret2) #None 没有匹配到字符,返回None

五. 分组练习

#把所有的数字给取出来

ret1 = re.findall('-?\d+(?:\.\d+)?', "1-2*(60+(-40.35/5)-(-4*3))")print(ret1) #['1', '-2', '60', '-40.35', '5', '-4', '3']

#把所有整数取出来

ret2 = re.findall('\d+(?:\.\d+)|(\d+)', '1-2*(60+(-40.35/5)-(-4*3))')print(ret2) #['1', '2', '60', '', '5', '4', '3']

ret2.remove('')print(ret2) #['1', '2', '60', '5', '4', '3']

#把'wahaha'里的wahaha取出来

ret3 = re.findall('>(\w+)wahaha')print(ret3) #['wahaha']

#r'(\w+)(\w+)>' r'(\w+)'

ret4 = re.search(r'(\w+)(\w+)>', r'wahaha')print(ret4.group()) #wahaha

#分组命名 : ?P

## r'(\w+)(\w+)>'

ret1 = re.search(r'\w+)>(\w+)(?P=name)>', r'wahaha')#把第一个分组的名字命为name, 两对尖角符<>之间的名字必须一样

print(ret1.group()) #wahaha

print(ret1.group('name')) #a 通过对group方法传分组名字的参数,来获取分组所匹配的字符

#r"\w+\1>"

ret2 = re.search(r'(\w+)(\1)>', r'wahaha')#\1是默认为和第一个分组名字一样

print(ret2.group()) #wahaha

print(ret2.group(1)) #a

六. 爬虫练习

#爬取豆瓣评分前250名电影的信息

importrefrom urllib.request importurlopen#内置的包 来获取网页的源代码 字符串#res = urlopen('http://www.cnblogs.com/Eva-J/articles/7228075.html')#print(res.read().decode('utf-8'))

defgetPage(url):

response=urlopen(url)return response.read().decode('utf-8')def parsePage(s): #s 网页源码

ret =com.finditer(s)for i inret:

ret={"id": i.group("id"),"title": i.group("title"),"rating_num": i.group("rating_num"),"comment_num": i.group("comment_num")

}yieldretdefmain(num):

url= 'https://movie.douban.com/top250?start=%s&filter=' % num #0

response_html = getPage(url) #response_html是这个网页的源码 str

ret = parsePage(response_html) #生成器

print(ret)

f= open("move_info7", "a", encoding="utf8")for obj inret:print(obj)

data=str(obj)

f.write(data+ "\n")

f.close()

com=re.compile('

.*?

.*?(?P\d+).*?(?P.*?)'

'.*?(?P.*?).*?(?P.*?)评价', re.S)

count=0for i in range(10): #一共十页

main(count) #count = 0

count += 25

python re模块下载_python: re模块相关推荐

  1. python xlrd模块下载_python xlrd模块介绍

    转载自:http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html 一.安装xlrd模块 到python官网下载 二.使用介绍 1.导入 ...

  2. python re模块下载_python re模块详解

    1.正则表达式基础 1.1正则表达式概念 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...

  3. python pymysql模块下载_Python Pymysql模块

    Python Pymysql的使用 Pymysql的作用 简单来说:pymsql是Python中操作MySQL的模块,就是让我们通过python来实现对数据库的操作的 (1)pymysql模块的下载 ...

  4. python os模块下载_Python OS模块目录文件处理

    Python编程语言优势特点比较突出,在Python语言中,有一种标准模块叫OS模块,Python OS模块包含普遍的操作系统功能,如果你希望你的程序能够与平台无关的话,这个模块尤为重要,它允许一个程 ...

  5. python pyh模块下载_Python PYH模块 · Seacme Huang

    Python生成HTML代码,制作HTML表格 一.pyh模块介绍 1.1 介绍 pyh是一个强大且简约的python模块,你可以使用它在python程序中生成HTML内容. pyh为了这一切提供了非 ...

  6. python xlrd模块下载_python xlrd模块

    一.什么是xlrd模块? Python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 二.使用介绍 1.常用单元格中的数据类型 类型 含义 e ...

  7. python os模块下载_python os模块

    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作 1.文件操作 build ...

  8. python安装后如何使用-python如何安装下载后的模块

    Python中的内置模块可以直接使用,如os模块,sys模块. 使用第三方模块之前,需要先下载并安装该模块,然后就能像使用标准模块和自定义模块那样导入并使用了.因此,本节主要讲解如何下载并安装第三方模 ...

  9. 跳一跳python源码下载_Python玩跳一跳【简】

    准备环境: Windows 10: [有] 安卓手机 [有] python(版本建议3以上) adb驱动 依赖安装包 Python下载安装[官网下载并安装] 详情参见 pip安装 pip用于安装依赖包 ...

最新文章

  1. Linux性能调优用这个“必杀技”,稳了!
  2. db2-存储过程word版
  3. figure diagram illustrate exemplify profile
  4. dev layoutview 怎么显示大小_Liunx驱动学习:基于imx6ul 驱动oledssd1306 实现终端显示...
  5. putty保存用户名和密码_使用PuTTY远程登录软件登录 Linux 实例
  6. 歪枣网股票数据下载接口汇总一
  7. 步步为营 .NET三层架构解析 七、UI的设计(登陆页面、注册页页和添加部门页面)...
  8. 9篇!悉尼科技大学入选CVPR2021都研究什么?
  9. c语言程序求点坐标在哪个象限,C课后习题
  10. C# 异步TCP Socket聊天室(1服务器,N客户端)
  11. 发那科机器人接线电源_电源开关上的L1和L2是不是火线和零线?
  12. bootstrap4 图标和文字行内对齐
  13. 【5G通信】基于matlab 5G通信新型多载波技术GFDM【含Matlab源码 106期】
  14. yum 查看安装的包 包含了哪些文件
  15. 如何使用smobiler的listview控件实现个人信息修改
  16. 谈谈键盘A键不定期失灵问题
  17. 20162327WJH四则运算第二周总结
  18. 什么是计算机内存?它的用途是什么?
  19. Python爬取6271家死亡公司数据,一眼看尽十年创业公司消亡史!
  20. winrar远程代码执行漏洞(cve-2018-20250)

热门文章

  1. bootstrap4和bootstrap3的区别
  2. Linux centos环境 安装谷歌浏览器
  3. 非静默授权没有弹出弹框_网易考拉Android统一弹框
  4. 蔚来智驾功能大更新:与其叫NOP+,不如叫NAD-
  5. git上传到阿里云code
  6. ppt模板页面过渡动画效果怎么制作?
  7. 归并排序 (递归 非递归)
  8. 基于用户的音乐推荐平台
  9. STM32CubeMX实现串口DMA中断通信
  10. Visual Assist 配色