学习笔记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用正则表达式解析和提取数据的主要内容,如果未能解决你的问题,请参考以下文章