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="wdpythonw"
>>> 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']
>>> 

原文地址:https://www.cnblogs.com/duxiao/p/7543646.html