正则表达式(匹配字符串)
web界面正则匹配工具:
http://tool.chinaz.com/regex/

元字符

.   匹配除换行符之外的任意字符
\w  匹配数字字母下划线
\d  匹配数字
\t  匹配制表符
\n  匹配换行符
\s  匹配空白符(包含,空格,制表符和换行符)
\b  单词的边界
\W  匹配非数字字母下划线
\S  匹配非空白符
\D  匹配非数字
^       匹配开始符
$       匹配结束符
|       或者,如果是有包含关系的,长的放左边
[]      匹配字符组,具体的范围
[^...]  匹配非字符组中的字符
()      匹配括号内的是一组转义符
如果在测试工具中测试正常的代码拿到python中,由于转义符的问题搞不定,那么就直接在字符串外面+r
print('\\\\n')
print('\\n')
print(r'\\n')
print(r'\n')事例:
www\.(baidu|google)\.com
[0-9] == [0123456789] #表示0到9的所有数
[a-z]/[A-Z]     表示a到z/A-Z所有英文字母
[A-Za-z0-9]     表示数字和大小写字母量词
贪婪匹配: 尽可能多的匹配(默认模式)
{n}     匹配n次
{n,}    匹配至少n次至多无限次
{n,m}   匹配至少n次至多m次
*       匹配前面字符0次或多次
+       匹配前面字符1次或多次
非贪婪/惰性匹配
?       匹配前面字符0次或1次(.*?)
abbbx   正则^ab+?x,如果正则是^ab+?结果则是ab总结
正则表达式: 不仅仅要能匹配出对的,还要尽量避免匹配错误的,提高精准度
分组的作用: 分组也可以和量词连用,表示这一个组遵循某个量词的约束常用的非贪婪匹配
*?      重复任意次,但尽可能少重复
.*?     匹配前边任意字符,尽可能少的匹配
+?      重复1次或更多次,但尽可能少重复
??      重复0次或1次,但尽可能少重复
.?x     取尽量少的任意字符,直到一个x出现

re的功能是在python中执行正则表达式
re模块下的常用方法
import re
re.findall  正则 待匹配字符串,列表,所有符合的项
re.search    变量.group取结果,只有一项结果
re.match     变量.group取结果,默认在正则之前加上^
re.finditer 把匹配的结果存放在迭代器中

re.findall('正则表达式','带匹配的字符')

re.findall('正则表达式','带匹配的字符')
ret = re.findall('\d+','aaa83bbb38')
print(ret)
结果
['83', '38']
事例2
ret = re.findall('\d','aaa83bbb38')
print(ret)
结果
['8', '3', '3', '8']# ?:把括号python中的分组变成了原来正则表达式中的分组
lst = re.findall(r"a(?:\d+)c", "a123456c")
l2 = re.findall(r"a(\d+)c", "a123456c")
print(lst)
print(l2)
结果
['a123456c']
['123456']

re.finditer()   #返回一个存放匹配结果的迭代器,节省空间

ret = re.finditer('\d+','linux83admin60yuan25')
print(ret)                  #直接打印返回的是一个迭代器
print(next(ret).group())    #查看第1个结果
for r in ret:               #查看剩余的结果print(r.group())
结果
<callable_iterator object at 0x000001FF0EACEBA8>
83
60
25

search 搜索, 查找
一旦匹配到结果,直接返回,如果匹配不到结果,返回None

ret = re.search('\d','aaa83bbb38')
print(ret)          #返回的匹配结果,而不是具体的值
print(ret.group())  #从左到右找到第一个匹配的取出
结果
<_sre.SRE_Match object; span=(4, 5), match='8'>
8ret = re.search('\d+','aaa83bbb22')
print(ret.group())
结果
83

match匹配,从头开始匹配,相当于在你正则前面加了一个^

ret = re.match('\d+','83aaa222bbb38')
print(ret.group())
等于
ret = re.search('^\d+','83aaa222bbb38')
print(ret)
结果
83

search和match的区别:
search查找,找到了结果就返回
match,从头开始匹配

案例:爬取电影天堂

import re
from urllib.request import urlopencontent = urlopen("https://www.dytt8.net/html/gndy/dyzz/20181228/57986.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 去掉.里面的\nfor 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"))结果黄金兄弟 / 新古惑仔 / 新版古惑仔 / 黄金七十二小时 2018 2018-09-20(中国香港) / 2018-09-21(中国) 郑伊健 Ekin Cheng , 陈小春 Jordan Chan , 谢天华 Michael Tse , 钱嘉乐 Kar Lok Chin , 林晓峰 Jerry Lamb , 曾志伟 Eric Tsang , 佘诗曼 Charmaine Sheh , 张雅玫 Yamei Zhang <br /><br />
ftp://ygdy8:ygdy8@yg45.dydytt.net:8373/阳光电影www.ygdy8.com.黄金兄弟.BD.720p.粤语中字.mkv

转载于:https://www.cnblogs.com/wangm-0824/p/10199691.html

python正则表达式及RE模块相关推荐

  1. python正则表达式之re模块方法介绍

    python正则表达式之re模块其他方法 1:search(pattern,string,flags=0) 在一个字符串中查找匹配 2:findall(pattern,string,flags=0) ...

  2. Python正则表达式和re模块,完美匹配中文与中文标点符号

    正则表达式和re模块 世界上分两种人,一种是懂正则表达式的,一种是不懂正则表达式的. https://darlewo.cn/getting_started_with_crawler_advanced_ ...

  3. Python 正则表达式使用--Re 模块详解

    目录 1. 常用正则表达式符号和特殊字符 ?2.? Re 模块:核心函数和方法 2.1 re.compile() 编译函数 2.1.1?re.compile() 语法格式 2.1.2?re.compi ...

  4. [ python ] 正则表达式及re模块

    正则表达式 正则表达式描述: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个'规则字符串',这个'规则字符串'用来     表达对字符串的一种过 ...

  5. Python正则表达式及re模块使用

    1. 正则表达式 元字符:具有固定含义的特殊符号: 常用元字符: . 匹配除了换行以外的任意字符 \w 匹配字母或者数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \n 匹配一个换行符 \t 匹 ...

  6. python正则表达式re模块之findall函数

    python正则表达式re模块之findall函数 1. re.findall函数介绍 2. findall函数捕获分组 3. re.findall中正则表达式(.*?) 4. re.findall中 ...

  7. 正则表达式 - Python 正则表达式 学习笔记 最全整理

    正则表达式 regular expression,用于匹配字符串中字符组成的方法,"用有限的符号表达无限的序列". JavaScript 正则表达式语法如下: /xxx/gi 两条 ...

  8. python正则表达式需要模块_使用Python正则表达式模块,让操作更加简单

    处理文本数据的一个主要任务就是创建许多以文本为基础的特性. 人们可能想要在文本中找出特定格式的内容,比如找出存在于文本中的电子邮件,或者大型文本中的电话号码. 虽然想要实现上述功能听起来很繁琐,但是如 ...

  9. python 正则表达式re 模块的使用

    python 正则表达式re 模块的使用 文章目录: 一.re模块介绍 1.re模块说明 2.官方文档给出的文档 3.别人总结的成表格中的内容 二.re模块使用介绍 1.常用函数源码 1.常用的函数介 ...

最新文章

  1. springboot2.4跨域配置的方法
  2. java8 无符号_Java8包装类 新增 无符号运算方法
  3. 程序员看过这篇文章 让你学会阅读源码!
  4. 枚举enum与#define 宏的区别?
  5. 【Android】init.rc
  6. redhat python3.4安装步骤
  7. 数据库每日一题 2020.04.29
  8. 千万别让海底捞知道你的生日
  9. 计算机网络物理层之数据通信的基础知识
  10. 强化学习实战(六)【Windows安装星际争霸Ⅱ 强化学习环境教程】
  11. 带你了解HTTP协议(一)
  12. object c中 new和alloc区别
  13. [HAOI2009]毛毛虫(树的直径)
  14. 干货:制造业中的机械智能(内附完整PPT)
  15. MapReduce之week2 test 分区计算结余(练习)
  16. EasyAR_实现AR涂涂乐
  17. Django个人博客搭建4-配置使用 Bootstrap 4 改写模板文件
  18. 去除数组中指定元素的方法
  19. Redis的配置及与memcached区别
  20. 【狂神】SQL笔记9 --三大范式

热门文章

  1. ms17_010 入侵Win7
  2. 「推荐」自由职业摄影师 Plus 视频课程
  3. LeetCode题库解答
  4. Google宣布收购摩托罗拉移动
  5. 一次github和jenkins集成构建异常处理
  6. 手机电池为什么会爆炸
  7. VisualFreeBasic:VisualBasic6望尘莫及之短路逻辑
  8. 计算机论文摘要200字模板,论文的摘要范文(论文摘要是摘抄还是自己写)
  9. cesium借助 turf 工具库绘制矩形 --任意倾斜角度 --vue2.0
  10. 网恋多是为自己的“猎艳”心理编织虚幻的梦境