Python爬虫程序设计KC18.ppt
文本预览下载声明
1.8 正则表达式
正则表达式是用来匹配与查找字符串的,从网上爬取数据自然或多或少会用到正则表达式。Python的正则表达式要先引入re模块,正则表达式以r引导,例如:
import re
reg=r\d+
m=re.search(reg,abc123cd)
print(m)
其中r\d+正则表达式表示匹配连续的多个数值,search是re中的函数,从abc123cd字符串中搜索连续的数值,得到123,返回一个匹配对象,因此程序的结果如下:
_sre.SRE_Match object; span=(3, 6), match=123
从结果看出,在指定的字符串中找到了连续的数值,它们是123,span(3,6)表示开始位置是3,结束位置是6,这正好是123在abc123cd中的位置。
Python中关于正则表达式的规则比较多,下面将介绍主要的内容,详细内容读者可以参考相关资料。
1、字符\d匹配0-9之间的一个数值。
例如:
import re
reg=r\d
m=re.search(reg,abc123cd)
print(m)
结果找到了第一个数值1:
_sre.SRE_Match object; span=(3, 4), match=1
2、字符+重复前面一个匹配字符一次或者多次。
例如:
import re
reg=rb\d+
m=re.search(reg,a12b123c)
print(m)
结果找到了b123:
_sre.SRE_Match object; span=(3, 7), match=b123
注意:rb\d+第一个字符要匹配b,后面是连续的多个数字,因此是b123,不是a12。
3、字符*重复前面一个匹配字符零次或者多次。
*与+类似,但有区别,例如:
import re
reg=rab+
m=re.search(reg,acabc)
print(m)
reg=rab*
m=re.search(reg,acabc)
print(m)
结果:
_sre.SRE_Match object; span=(2, 4), match=ab
_sre.SRE_Match object; span=(0, 1), match=a
4、字符?重复前面一个匹配字符零次或者一次。
例如:
import re
reg=rab?
m=re.search(reg,abbcabc)
print(m)
结果:
_sre.SRE_Match object; span=(0, 2), match=ab
匹配结果是ab,其中b重复一次。
5、字符.代表任何一个字符,但是没有特别声明时不代表字符\n。
例如:
import re
s=xaxby
m=re.search(ra.b,s)
print(m)
结果.代表了字符x
_sre.SRE_Match object; span=(1, 4), match=axb
6、|代表把左右分成两个部分。
例如:
import re
s=xaabababy
m=re.search(rab|ba,s)
print(m)
结果匹配ab或者ba都可以:
_sre.SRE_Match object; span=(2, 4), match=ab
7、特殊字符使用反斜线\引导,例如\r、\n、\t、\\分别表示回车、换行、制表符号与反斜线自己本身。
例如:
import re
reg=ra\nb?
m=re.search(reg,ca\nbcabc)
print(m)
结果匹配a\n\b:
_sre.SRE_Match object; span=(1, 4), match=a\nb
8、字符\b表示单词结尾,单词结尾包括各种空白字符或者字符串结尾。
例如:
import re
reg=rcar\b
m=re.search(reg,The car is black)
print(m)
结果匹配car,因为car后面是以个空格:
_sre.SRE_Match object; span=(4, 7), match=car
9、[]中的字符是任选择一个,如果字符是ASCII码中连续的一组,那么可以使用-符号连接,例如[0-9]表示0-9的其中一个数字,[A-Z]表示A-Z的其中一个大写字符,[0-9A-Z]表示0-9的其中一个数字或者是A-Z的其中一个大写字符。
例如:
import re
reg=rx[0-9]y
m=re.search(reg,xyx2y)
print(m)
结果匹配x2y:
_sre.SRE_Match object; span=(2, 5), match=x2y
10、^出现在[]的第一个字符位置,就代表取反,例如[^ab0-9]表示不是a、b,也不是0-9的数字。
例如:
import re
reg
显示全部