正则表达式用法及实例
正则表达式
简单来说,正则表达式就是描述字符串的一套规则。比如,我们想找出一个网页中的所有URL链接,其他的信息需要过滤掉。那么此时,我们可以观察链接的格式,然后写一个正则表达式来表示所有的电子邮件。随后,我们可以利用该表达式从网页中提取出所有满足该规则的URL链接。正则表达式的功能非常强大,在爬虫的实际项目中,对于处理特定格式的信息,经常需要用到正则表达式。
在Python中,可以使用re模块来实现Python正则表达式。
一、正则表达式基础知识
正则表达式学习其实非常简单,就是有较多的需要记的字符、字符功能。为了能够有一个系统的i思维去把握正则,我将会从原子、元字符、模式修正符与懒惰模式等方面介绍。
-
原子
原子——正则表达式中最基本的单位(普通字符、非打印字符、通用字符、原子表)
普通字符
数字、大小写字母、下划线等都可作为原子使用。
非打印字符
符号 | 含义 |
---|---|
\n | 用于匹配一个换行符 |
\t | 用于匹配一个制表符 |
通用字符
符号 | 含义 |
---|---|
\w | 匹配任意一个字母、数字或下划线 |
\W | 匹配除字母、数字或下划线以外的任意一个字符 |
\d | 匹配任意一个十进制数 |
\D | 匹配除十进制数以外的任意一个字符 |
\s | 匹配任意一个空白字符 |
\S | 匹配除空白字符以外的任意一个字符 |
原子表
可以定义一组地位平等的原子,然后匹配的时候会取该原子表中的任意一个原子进行匹配。在Python中,原子表由[]来表示,如[xyz]就是一个原子表,定义了三个原子,三个原子地位平等。(另注:^xyz表示除原子表以外的任意字符)
-
元字符
以上是常见原子的使用,一般需要结合元字符才能发挥正则表达式的强大功能。
元字符,在正则表达式中即具有特殊含义的字符。(另注:| 模式选择符)
符号 | 含义 |
---|---|
. | 匹配除换行符以外的任意字符 |
^ | 匹配字符串的开始位置 |
$ | 匹配字符串的结束位置 |
* | 匹配0次、1次或多次前面的原子 |
+ | 匹配1次或多次前面的原子 |
{n} | 前面的原子恰好出现n次 |
{n,} | 前面的原子至少出现n次 |
{n,m} | 前面的原子至少出现n次,至多出现m次 |
() | 模式单元符 |
-
模式修正符
所谓模式修正符,即在不改变正则表达式的情况下,通过模式修正符改变正则表达式的含义,从而实现一些匹配结果的调整功能。
符号 | 含义 |
---|---|
I | 匹配时忽略大小写(Ignore的首字母) |
M | 多行匹配(Multiple的首字母) |
L | 做本地化识别匹配 |
U | 根据Unicode字符及解析字符 |
S | 让.匹配包括换行符,可以匹配任意字符 |
- 贪婪模式与懒惰模式
贪婪模式核心:尽可能的多匹配,懒惰模式核心:匹配成功一次就不再匹配。
贪婪模式在第一次匹配成功后,不会停止,一直到整个待匹配内容的最后。
懒惰模式在第一次匹配成功后就会停止,就近原则。
二、正则表达式常用函数
常见的正则表达式函数有 re,match()、re,search()、全局匹配函数、re,sub()。
re.match()——源字符串的开头进行匹配,要求第一个字符就匹配成功
re.search()——全文进行检索匹配,与match()最大不同是,在全文在进行检索并匹配
全局匹配函数(re.findall)
需先对正则表达式进行预编译,pattern=re.compile(".python."),返回的是list集合
re.sub()函数
re.sub(pattern,rep,string,max)——rep:要替换成的字符串,max:可选项,最多替换次数
三、正则表达式实例
对于正则表达式的学习,实战是最好的方法。当然也需要不断地积累,做到熟能生巧。
-
匹配.com或.cn后缀的URL网址
实例目的:将一串字符里面的以.com或.cn为域名的URL网址匹配出来。 -
匹配电话号码
实例目的:将一串字符里出现的电话号码信息提取出来。 -
匹配电子邮件
实例目的:将一串字符里面出现的电子邮件信息提取出来。
四、结束语
最后,祝希望大家都能学有所成!!!