【学习笔记】37、用正则表达式解析和提取数据
用正则表达式解析和提取数据
正则表达式是一种非常好用的信息提取手段,它可以高效的从文本中提取所需信息。
1、findall()函数
基本语法格式:
re.findall(匹配规则,原始文本)
例子:提取“Hello 123 World!”中的3个数字。
匹配规则中,‘/d’表示匹配一个数字,连续三个‘/d’就表示匹配连续的三个数字。
返回的结果是一个含有字符串元素的列表,而不是单纯的字符串或者数字。
常见的匹配符
符号 |
含义 |
\d |
匹配1个数字字符 |
\w |
匹配1个字母、数字或下划线字符 |
\s |
匹配1个空白字符(换行符、制表符、普通空格等) |
\S |
匹配1个非空白字符 |
\n |
匹配1个换行符(相当于按下一次回车) |
\t |
匹配1个制表符(相当于按下Tab键或者8次空格键) |
. |
匹配1个任意字符,换行符除外 |
* |
匹配0个或者多个表达式 |
+ |
匹配1个或者多个表达式 |
? |
常与“.”和“*”配合使用,组成非贪婪匹配 |
() |
匹配括号内的表达式,也表示一个组 |
2、非贪婪匹配“(.*?)”
“.”表示匹配除了换行符以外的1个任意字符,“*”表示匹配0个或者多个表达式,两者合在一起“.*”则称的规则称为贪婪匹配,如果后面再加上“?”就变成了非贪婪匹配。
“(.*?)”用于提取文本A与文本B之间的内容,并不需要知道内容的确切长度和格式,但是需要知道内容位于哪两串文本之间,基本语法如下:
文本A(.*?)文本B
3、非贪婪匹配“.*?”
另一种非贪婪匹配的语法格式如下:
文本A.*?文本B
“.*?”用于代替文本A和文本B之间的所有内容,因为文本A和文本B之间的内容经常变动或者毫无规律,不能直接写到匹配规则里面,也或者文本A和文本B之间的内容很多,不方便写到匹配规则里面。
4、自动考虑换行的修饰符re.S
修饰符有很多,最常用的是re.S,其作用是让findall()函数再查找时可以自动考虑换行的影响,使得贪婪匹配可以匹配换行。
基本的语法格式如下:
re.findall(匹配规则,原始文本,re.S)
5、辅助功能介绍
sub()函数
sub()函数名称源于英文单词substitute(替换),作用是清洗正则表达式提取出来的内容,其基本语法如下:
re.sub(需要替换的内容,替换值,原字符串)
比如正则表达式提取出来的内容中还夹杂着一些无用内容,传统的处理方式是使用replace()函数处理,当然也可以,但是使用sub()函数则更加灵活高效。
其中的“<.*?>”代表任何“<***>”形式的字符串,这样一来自然涵盖了全部内容。
中括号“[ ]”的用法
在正则表达式中,“.”、“*”、“?”等符号都有特殊的含义,那么如果想要匹配的就是这些字符怎么办呢?这里就需要使用中括号“[ ]”,取消这些符号的特殊含义。
6、综合实例
爬取某小说网上某部小说的全部章节,保存到本地txt文件中。
【学习笔记】37、用正则表达式解析和提取数据相关推荐
- fillna填充某一列_pandas学习笔记 -了解数据集基本情况,提取数据,缺失值NULL的判断,删除和补充(dropna,fillna的用法)...
part1 了解数据集基本情况 当我们面对一个很大的数据集的时候,如何快速得到他的行数与列数呢? 举个栗子,我们读取一个nhanes数据集,我们加上一个.shape,输出的结果就是他的行数和列数了. ...
- 影像组学视频学习笔记(34)-使用3D Slicer软件提取影像组学特征、Li‘s have a solution and plan.
作者:北欧森林 链接:https://www.jianshu.com/p/afcd06221ea4 来源:简书,已获授权转载 RadiomicsWorld.com "影像组学世界" ...
- linux软件包管理解析,linux学习笔记_09_软件包管理解析.doc
linux学习笔记_09_软件包管理解析 软件包管理 软件包分类 源码包(C语言编写的源代码) linux主要由C语言来写. 源码包可以用写字板打开 脚本安装包:源码包进行再开发的源码包(提供安装界面 ...
- XML学习笔记02【xml_解析】
Java后端 学习路线 笔记汇总表[黑马程序员] XML学习笔记01[xml_基础.xml_约束][day01] XML学习笔记02[xml_解析][day01] 目录 03 xml_解析 xml_解 ...
- 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)
写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持) 参考文章: (1)写给大忙人的ELK最新版6.2.4学习笔记-Logstash ...
- NDK学习笔记:FFmpeg解压MP34提取音频PCM(swrContext、swr_alloc_set_opts)
NDK学习笔记:FFmpeg解压MP34提取音频PCM 承接 FFmpeg解压MP4提取视频YUV ,这次我们需要提取的是音频原始数据PCM.代码流程大同小异,主要区别就是AVFrame->PC ...
- Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理
Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理 1 前言:啥是正则表达式 简单来讲,正则表达式是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的 ...
- poi 顺序解析word_JavaPOI解析word提取数据到excel
Java POI解析Word提取数据存储在Excel 一.了解POI POI以前有了解,这次需求是解析word读取其中标题,还有内容赛选获取自己想要的内容 经过两天的学习,开始熟悉Java这么读取wo ...
- Java POI解析Word提取数据存储在Excel
JavaPOI解析word提取数据到excel 一.了解POI POI以前有了解,这次需求是解析word读取其中标题,还有内容赛选获取自己想要的内容 经过两天的学习,开始熟悉Java这么读取word和 ...
最新文章
- 腾讯老照片修复算法开源,细节到头发丝,3种预训练模型可下载 | GitHub热榜
- oracle生成xml格式化,介绍关于Oracle下存取XML格式数据的方式教程一览
- python语言入门n-Python基础语法学习笔记
- java碰到边界变颜色_求教!!!小球撞墙怎么改变颜色。
- ajax修改按钮的html值,ajax - 在yii 1中使用ajax根据选定的单选按钮选项更新html字段值 - 堆栈内存溢出...
- css3点击会移动到点,CSS3过渡点击事件
- 企业为什么要做SEO,它的重要性有哪些?
- 看看你爱的他今天是什么‘颜色‘ -- Python爬取微博评论制作专属偶像词云
- Vue中的scoped和scoped穿透
- C#面向对象三大特性
- [HNOI2011]数学作业 题解
- Matlab美图秀秀
- Java之JvisualVM简介
- PHP第一季视频教程.李炎恢.学习笔记(五)(第3章 操作符与控制结构(1)(2))
- 秒杀系统设计的关键点思考
- BZOJ1050 [HAOI2006]旅行comf(Kruskal算法)
- docker-elastic7.9.3集群搭建并开启用户验证
- 白茶清欢无别事,我在等风也等你,苦酒折柳今相离,无风无月也无你
- IOS Label下划线 中划线
- Word 2016 撰写论文(1): 公式居中、编号右对齐