regular expression :描述字符串排列的一套规则,通过这套规则,我们可以过滤掉不需要的信息,从而提取出我们需要的信息,在爬虫中,我们如果想要从网页中获取我们想要的信息就需要构造相应的正则表达式结合python的方法进行获取。
1.原子
原子是正则表达式中最基本的单位,每个正则表达式至少包含一个原子,原子类型:
1)普通字符
import re
pattern="hello"
string="abdsafdasdhelloAsad"
result=re.search(pattern,string)
print(result)
2)非打印字符作为原子
\n—>换行符
\t–>制表符
import re
pattern="\n"
string='''abdsafdasdhelloAsa
dadassd'''
result=re.search(pattern,string)
print(result)
3)通用字符
符号 | 含义 |
---|---|
\w | 匹配任意一个字母,数字或下划线 |
\W | 与/w相反 |
\d | 匹配任意一个十进制数 |
\D | 与/d相反 |
\s | 匹配一个任意空白字符 |
\S | 与/s相反 |
import re
pattern="\wsa"
string='''abdsafdasahelloAsa
dadassd'''
result=re.search(pattern,string)
print(result)
输出:
<_sre.SRE_Match object; span=(2, 5), match='dsa'>
4)原子表
原子表的意思就是可以定义一组平等的原子,在匹配的时候取该原子表的任意一个原子进行匹配,原子表用[]表示,比如[cvb]oo就是在cvb中任意选一个元素,coo,voo,boo都是正确的匹配,类似的[^cvb]oo表示的不包括cvb中的任意一个。
import re
pattern="[abc]s"
string='''abdsafdasahelloAsa
dadassd'''
result=re.search(pattern,string)
print(result)
result:
<_sre.SRE_Match object; span=(7, 9), match='as'>
2.元字符
元字符就是正则表达式里面表示特殊含义的字符,比如重复n次前面的元素,具体的表可以参照正则表达式速查表
import re
pattern1="^ab"
pattern2="sd$"
string='''abdsafdasahelloAsa
dadassd'''
result1=re.search(pattern1,string)
result2=re.search(pattern2,string)
print(result1)
print(result2)
3.模式修正
模式修正的含义的就是实现一些匹配结果的调整,比如不区分大小写(I),多行匹配(M)等
import re
pattern2="sd$"
string='''abdsafdasahelloAsa
dadasSd'''
result2=re.search(pattern2,string,re.I)
print(result2)
结果:
<_sre.SRE_Match object; span=(31, 33), match='Sd'>
4.贪婪模式和懒惰模式
这两个名词的含义一看都能明白,贪婪的意思就是尽可能多的匹配,懒惰的模式就是只匹配一个,实现这种简单的贪婪模式比如正则表达式”p.*y”,这就是贪婪模式。
正则表达式常用函数
1)re.match(pattern,string,flag),从源字符串开始位置开始匹配
2)re.serach(),扫描整个字符串
3)全局匹配函数
全局匹配函数就是要匹配所有有可以匹配的字符,所有的结果都要提出来
思路:
使用re.compile()对正则表达式预编译–>使用findall()根据正则表达式找出所有结果。
import re
string="abcdfsdfdabdfsdfdsvsfd"
pattern=re.compile(".b.")
result=pattern.findall(string)
print(result)
结果:
['abc', 'abd']
4)re.sub(pattern,rep,string,max)根据pattern,从string中找出符合条件的结果,替换为req,最多可替换max次,默认为全部替换。
—-end————–