Python培训
美国上市Python培训机构

400-111-8989

热门课程

达内python培训教程:python正则表达式解析

  • 发布: 枫叶
  • 来源:数量分析学习笔记
  • 时间:2018-09-05 15:21

在用Python网页爬虫时,我们经常使用xpath,beautifulsoup等一些工具包辅助来实现解析网页代码,获取我们需要的内容。

这些工具虽然方便,但有时候找不到规则的时候,使用最基本的方法,即:正则表达式,能更加便捷。另外,正则表达式,不仅仅在python中的认可,其他软件中字符识别同样可用,可以算得上是字符匹配中的“通用语言”。

那么正则表达式是什么呢?

正则表达式:就是用于描述字符串排列的一套规则。我们用这个规则去匹配查找可以匹配的上的字符串。

基本思想:

存在一个文本信息,里面存在一些我们需要的内容,也有很多我们不需要的内容,我们希望告诉计算机我们需要哪些内容,然后计算机帮助我们从文本中提取我们想要的内容。(我们告诉计算机文本获取模式就是规则)

例如: 存在一个文本信息

string='021-2743908148937895749201892'

我们目的是提取里面的电话号码:(021-27439081)

(这里我们有先验信息:电话号码的排列方式只可能两种: 3位数字-8位数字 或者 4位数字-7位数字)

语言描述规则:在文本信息中去搜索符号 “-”,如果存在符号“-”,查看前面是3位还是4位,如果是3位, 如果是三位那么 “-”号前取3位,后取8位,得到电话号码;如果“-”号前有4位,那么“-”前取4,后取7位,得到电话号码。

正则表达式表示:"\d{4}-\d{7}|\d{3}-\d{8}"

上面两种表达方式表达的是一个意思,只不过正则表达式是计算机可以识别的。 为了然计算机识别,所以需要规定具体的符号固定的意思,例如上面的表达式中:

\d 表示: 匹配任何一个十进制数

{m}表示:它前面的元素恰好出现m次, 所以\d{4}表达的意思就是,出现四次 十进制数

| 表示:“或者”的意思

将这些符号意思还原到正则表达式中,翻译出来,就是语言描述的那个规则。

我们用python语言来识别代码如下:

import re # re包用来做 正则表达式匹配

pattern="\d{4}-\d{7}|\d{3}-\d{8}" # 我们定义正则表达式,也就是字符规则

string='021-2743908148937895749201892' # 这是我们希望从中搜索的字符

result=re.search(pattern,string) # 告诉计算机,让它按照pattern的规则在string里面去 找能匹配的上的字符串

print(result) # 输入得到的结果

输入结果如下:

<_sre.SRE_Match object; span(0,12) match='021-27439081'>

这里:span(0,12)是说匹配的位置是0~12位; 匹配的内容是: 021-27439081

通过这个例子可以看出:

正则表达式就是用有固定意义的字符描述一个搜索规则,这个搜索规则恰好是取匹配我们在文本信息中需要的内容。

为了能去表达足够复杂的规则,需要有很多的 有固定意义的符号,下面给出常用的符号:

----------------------------------------------------------------------

\w 匹配任意字母,数字或下划线;

\W 匹配除字母,数字或下划线 以外的任意字符;

\d 匹配任意10进制数

\D 匹配任意除10进制外的数

\s 匹配任意一个空白字符

\S 匹配除空白字符外的任意一个其他字符

. 匹配除换行符以外任意一个字符

^x 匹配字符串的开始位置,即必须以x开始;

$x 匹配字符串的结束位置,即必须以x结尾

x* 匹配前面的原子x 出现0次,1次或者多次

x? 匹配0次或者1次前面的原子x

x+ 匹配1次或者多次前面的原子x

x{n} 前面的原子x恰好出现n次

x{n,m} 前面的原子至少出现n次,至多出现m次

| 模式选择符,可以设置多个模式:表示“或者”的意思

() 模式单元符,(cd){1,}表示cd整体至少出现一次; cd{1,}则表示d至少出现一次

\n 匹配换行,是换行符

存在一些匹配修正符号,使用规则是: re.research(pattern,string,re.修正符)

I 匹配时忽略大小写 (符号是 i 的大写,不是或者的那个符号)

M 多行匹配

L 做本地化识别匹配

U 根据Unicode字符及解析字符

S 让.匹配包括换行符

----------------------------------------------------------------------------------------------------

通过上面各种符号的灵活组合就可以去匹配任何你想要的规则,搜索到你想要的文本信息。

---------------------------------------------------------------------------------------

补充常用re包里面的函数:

result=re.search(pattern,string,re.修正符) :在整个文本信息里面去搜索 ( 最多搜索一个匹 配上的内容就停止搜索 )

result.span() 得到匹配结果的位置;

result.match() 得到规则下匹配的结果内容;

re.match(pattern,string.re.修正符): 从文本信息的起始位置搜索

re.compile(pattern,string.re.修正符): 在整个的文本信息中搜索,有多少匹配的上的,都搜 索出来

re.sub(pattern,rep,string,max) : 用pattern规则在string里面搜索匹配的内容,并且将匹配 上的字符替换成rep里面的内容, 最多匹配max次。

-----------------------------------------------------------------------------------------------------

虽然现在很多包能方便的匹配,但熟练使用正则表达式匹配,很多时候反而更加方便,而且使用起来较为灵活。

还有一个作用,用起来比较炫呀,写一大串莫名其妙的符号,挑战自己的逻辑思维;

计算机学好的,用DOS命令来执行各种任务;

统计,计量学的好的,excel来做各种复杂模型......

本文内容转载自网络,本着分享与传播的原则,版权归原作者所有,如有侵权请联系我们进行删除!

预约申请免费试听课

上一篇:差评近一半,用 Python 分析胡歌的《猎场》到底值不值得看?
下一篇:Python运维自动化开发之Paramiko模块

稳住,别慌!这就送你Python中的异常处理宝典!

Python开发中20个常用的库和模块

python的文件操作方法汇总

达内python培训教程:python正则表达式解析

选择城市和中心
贵州省

广西省

海南省