学习笔记37用正则表达式解析和提取数据

Posted SAP剑客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记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用正则表达式解析和提取数据的主要内容,如果未能解决你的问题,请参考以下文章

jmeter 学习笔记

什么时间用正则表达式什么时间用json提取器

正则表达式特殊字符串学习笔记

HttpRunner学习4--使用正则表达式提取数据

Linux学习笔记 第八章 文本处理工具与正则表达式

正则表达式 学习笔记