Python爬虫-正则表达式
正则表达式
只提取关注的数据,进行数据赛选
原子:
基本组成单位
普通的字符
非打印支付
通用字符
普通的字符
>>> import re >>> pat="yue" >>> string="http://yum.iqianyue.com" >>> rst1=re.search(pat,string) >>> print(rst1) <_sre.SRE_Match object; span=(16, 19), match='yue'>
>>> pat2="abc" >>> rst2=re.search(pat2,string) >>> print(rst2) None >>>
非打印字符()
通用字符
|w |W处理字符下滑线任意的字符
|d 十进位数 |D
|s 空白字符 |S
>>> pat4="\w\dpython\w" >>> string"hahahhadhsfd10pythondasdsadas" SyntaxError: invalid syntax >>> string="hahahhadhsfd10pythondasdsadas" >>> rst5=re.search (pat4,string) >>> print(rst5) <_sre.SRE_Match object; span=(12, 21), match='10pythond'> >>>
原子表 【jsz】表示 只有一位的匹配出来
>>> pat="pyth[jsz]n" >>> string = "hsdsdfjsdzpythsdfdfda" >>> rst6=re.search (pat,string) >>> print(rst6) None
元字符
特殊含义的字符,比如重复前边的n字符
.匹配任意字符
^匹配
$匹配结束
*匹配一次 零次 或者多次
?匹配零次或者一次
{n}
{n,}
s{4,7} 表示 s 最少出现4次 最多出现7次
t{3}前面的原子出现t,3次
()
import re pat=".python..." string="dfdsfsfpythonfsdfdsfds" rst=re.search (pat,string) print(rst) 。除了换行符任意字符
pat1="python|php" string2="abcdphp5454pythonfdfd" rst2=re.search(pat1,string2) print(rst2)
模式修正符
在不改变正则表达式的情况下,实则想要的结果
忽略大小写L M L U S
pat3="python" pat4="python" string3="dfdsfasPythonfafdfa" rst4=re.search(pat3,string3) print(rst4) rst5=re.search(pat3,string,re.L) print(rst5)
<_sre.SRE_Match object; span=(7, 13), match='python'>
贪婪模式和懒惰模式
贪婪尽可能多的匹配
懒惰尽可能少的匹配
import re string="dfdsfsfpythonfsdfdsfdsfdfdfdfy" pat5="p.*y"#贪婪模式 pat6="p.*?y"#懒惰模式 rst5=re.search(pat5,string) print(rst5) rst6=re.search(pat6,string) print(rst6) <_sre.SRE_Match object; span=(7, 30), match='pythonfsdfdsfdsfdfdfdfy'> <_sre.SRE_Match object; span=(7, 9), match='py'> >>>
正则表达式函数
re.match() :从头开始搜索
re.search(): 字符串中搜索 左 到 右
全局匹配函数:re.compile(pat1).findall(string)
re.sub()
import re pat="p.*?y" string="pdasdaysdfdsfdsfpdadadasydfsfdfsf" rst=re.compile(pat).findall(string) print(rst) ['pdasday', 'pdadadasy'] >>>