Python爬虫入门<七>–正则表达式
标签:正则表达式
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本(百度百科)
一、原子
原子是最小单位,每个正则表达式最少有一个原子,原子可以分为:普通字符、非打印字符、通用字符、原子表等几类
1.普通字符
普通字符包括的是数字、字母、下划线等,我们用简单的例子说明一下:
我们以baidu为例:
import re
#基本原子
atom = "baidu"
string1 = "www.baidu.com"
result = re.search(atom,string1)
print (result)
结果:
<_sre.SRE_Match object; span=(4, 9), match='baidu'>
说明匹配成功
二、非打印字符
我们进场遇到的非打印字符就是换行字符:/n,方法和第一个一样
还有很多字符,我就不一一指出啦 ,我给出一个链接,大家可以去查找:
正则表达式 - 元字符
三、贪婪模式和懒惰模式
很明显,贪婪模式就是尽可能多的去匹配,而懒惰模式是尽可能少的去匹配字符串
import re
#贪婪模式
pattern1 = "p.*y"
#懒惰模式
pattern2 = "p.*?y"
string1 = "ppsdsfspfsphfymfdpython"
result1 = re.search(pattern1,string1)
result2 = re.search(pattern2,string1)
print (result1)
print (result2)
结果
<_sre.SRE_Match object; span=(0, 19), match='ppsdsfspfsphfymfdpy'>
<_sre.SRE_Match object; span=(0, 14), match='ppsdsfspfsphfy'>
懒惰模式其实就是就近原则,相对来说比较精确。
四、常用函数
1.re.match()函数
格式:re.match(pattern,string,flag)
import re
pattern = ".asdf"
string1 = "vasdfsdfvbgsdert"
result1 = re.match(pattern,string1)
result2 = re.match(pattern,string1).span()
print (result2)
print (result1)
结果:
(0, 5)
<_sre.SRE_Match object; span=(0, 5), match='vasdf'>
注意:span()作用就是过滤一些信息,使用span()的时候,一定要注意匹配时候,不存在字符串是会报错误的
2.re.search()
re.search()函数和re.match(),这两个区别就在于,re.match()开始的位置不符合
代码:
import re
pattern = "hello"
strings = "qwehellosdsd"
print (re.match(pattern,strings))
print (re.search(pattern,strings))
结果
None
<_sre.SRE_Match object; span=(3, 8), match='hello'>
3.全局匹配函数
我们从上面可以知道,很多字符串都是可以匹配一个结果,但是对于多个匹配合适的结果,我们需要用全局匹配函
1.首先,我们需要用re.compile()对正则表达式进行预编译
2.用findall()找出全部字符串
import re
string1 = "asdfghjkasdhhasd"
pattern = re.compile("asd.")
result = pattern.findall(string1)
print (result)
结果:
['asdf', 'asdh']
4.re.sub函数
函数原型:re.sub(pattern,rep,string,max)
pattern:正则表达式 rep:要替换的字符串 string:源字符串 max:可选择最多替换字符串,默认全部
import re
string1 = "12ssasdlkjertasd"
pattern = "asd"
result1 = re.sub(pattern,"hello",string1)
result2 = re.sub(pattern,"hello",string1,1)
print (result1)
print (result2)
结果
12sshellolkjerthello
12sshellolkjertasd
这个不错——正则表达式生成工具