python爬虫正则表达式
1、正则表达式概念:用来简洁表达字符串的方式。(regular expression regex RE)
通用的字符串框架
针对字符串表达“简洁”和“特征”思想的工具。
2、正则表达式的语法:
2.1、“.” :表示任何单个字符
2.2、“[]” :字符集,对单个字符给出取值范围
[abc]表示a、b、c,[a-z]表示a到z单个字符
2.3、“[^]” :非字符集
[^abc]表示不是a,b,c,的单个字符
2.4、“*” :前一个字符的0次或无限次扩展
2.5、“+” :前一个字符1次或无限次扩展
2.6、“?” :前一个字符的0次或1次扩展
2.7、“|” :或,左右表达式任意一个
abc|def 表示abc或def
2.8、“{m}” :扩展前一个字符m次
2.9、“{m,n}” :扩展前一个字符m至n次(含n)
2.10、“^” :匹配字符串开头
^abc 表示abc开头字符串
2.11、“$” :匹配字符串结尾
abc$ 表示abc结尾字符串
2.12、“()” :分组标记,内部智能使用“|”操作符
2.13、“\d” :数字,等价于[0-9]
2.14、“\w” :单词字符,等价于[A-Za-z0-9_]
eg:^[A-Za-z]+$ :表示由26个字母组成的字符串
:^[A-Za-z0-9]+$:表示由26个字母和数字组成的字符串
:^-?\d+$:整数形式的字符串 #“-”扩展0次或一次,表示正负
:^[0-9]*[1-9][0-9]*$:表示正整数形式的字符串
:[1-9]\d{5}:中国境内邮政编码,6位
:[\u4e00-\u9fa5]:匹配中文字符
3、re库的使用
3.1、表示类型
3.1.1、raw string类型(原生字符串类型)表示正则表达式,表示为:r'text'
r'[1-9]\d{5}'
r'\d{3}-\d{8}|\d{4}-\d{7}'
原生字符串是不包含转义字符,“\”不被解释为转义符
3.1.2、string类型,
'[1-9]\\d{5}'
'\\d{3}-\\d{8}|\\d{4}-\\d{7}'
“\”解释为转义字符,得添加“\”以示区别
3.2、re库的主要函数
3.2.1、re.search() :在一个字符串中搜索匹配正则表达式的第一位置,返回match对象。
函数原型:re.search(pattern,string,flag=0)
pattern:正则表达式的字符串或原生字符串表示
string:要匹配的字符串
flag:正则表达式使用时的控制标记
re.I re.IGNORECASE :忽略大小写区分
re.M re.MULTILINE :作用于正则表达式中的“^”操作符能够将给定字符串的每行当作匹配开始
re.S re.DOTALL :作用于正则表达式中的“.”操作符能够匹配所有字符,默认匹配除换行符外的所有字符
3.2.2、re.match() :从一个字符串的开始位置起匹配正则表达式,返回match对象。
函数原型:re.match(pattern,string,flag=0)
3.2.3、re.findall() :搜索字符串,以列表类型返回全部能匹配的子串。
函数原型:re.findall(pattern,string,flag=0)
3.2.4、re.split() :将一个字符串按照正则表达式匹配结果进行分割,返回列表类型。
函数原型:re.split(pattern,string,maxsplit,flag=0)
maxsplit :最大分割数
3.2.5、re.finditer() :搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象。
函数原型:re.finditer(pattern,string,flag=0)
3.2.6、re.sub() :在一个字符串中替换匹配正则表达式的子串,返回替代后的字符串。
函数原型:re.sub(pattern,repl,string,count=0,flags=0)
repl :替换的字符串
count :替换的次数
4、re库的等价用法
4.1、函数式用法:一次性操作
>>rst=re.search(r'[1-9]\d{5}','BIT 100081')
4.2、面向对象用法:编译后的多次操作
>>pat=re.compile(r'[1-9]\d{5}')
>>rst=pat.search('BIT 100081')
好处:一次编译,多次函数执行,可加快程序执行
方法与re的基本方法对应