Python培训
400-996-5531
在用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来做各种复杂模型......
本文内容转载自网络,本着分享与传播的原则,版权归原作者所有,如有侵权请联系我们进行删除!
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved