什么是正则表达式:
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
目的:
-
给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
-
可以通过正则表达式,从字符串中获取我们想要的特定部分。
特点:
-
灵活性、逻辑性和功能性非常强;
-
可以迅速地用极简单的方式达到字符串的复杂控制。
-
对于刚接触的人来说,比较晦涩难懂。
元字符:
匹配边界:
^ :匹配字符串的开头,例如:^a,匹配以 a 开头的字符串,a,aa,ab,abc
$ :匹配字符串的结尾,例如:$a,匹配以 a 结尾的字符串,a,aa,ba,cba
\b:匹配单词(以空格区分)以…为边界,例如:er\b,匹配以 er 为边界的单词,ever,very 无法匹配
\B:匹配单词(以空格区分)不以….为边界
特殊字符:
. :匹配除了换行符以外的任意一个字符
[ ] : 匹配括号中的任意一个字符,例如:[abc],匹配 a,b,c 任意一个
\d :匹配任意一个数字
\D:匹配任意一个非数字
\w:匹配任意一个数字,字母,下划线
\W:匹配任意一个非数字,字母,下划线
\s:匹配任意一个空白字符,比如换行符,空格等
\S:匹配任意一个非空白字符
匹配重复次数:
*:匹配前一个字符无限次
+:匹配前一个字符 1 次或者多次,至少匹配 一次
?:匹配前一个字符 0 次或者 1 次,最多 1 次
{n}:匹配前一个字符 n 次
{n,m}:匹配前一个字符 n-m 次
{n} :匹配前一个字符至少 n 次
|:匹配二者中的一个
爬虫中真个表达式的使用:
# 1、导入re模块
import re
# 2、使用compile()制定规则
pattern = re.compile(r'\d')
# 3、开始匹配
res = pattern.match(str)
# match() 只匹配一次,从头开始匹配,开头不符合规则直接返回None,匹配成功返回的是match对象
print(res.group())
# group()获取match对象中的内容
res = pattern.search(str)
# search()全局匹配,只成功一次,返回match对象
res = pattern.findall()
# 全局匹配,返回一个列表,所有符合规则的子串全部返回,没有返回空列表
res = pattern.finditer(str)
# 全局匹配,返回迭代器
正则表达式的两大模式:
贪婪模式:尽可能多的匹配:.*
非贪婪模式:尽可能少的匹配:.*?
总结:
爬虫中相对万能的正则表达式:
模式:非贪婪模式
匹配方法:findall
规则:re.compiler(r’<边界>(.\*?)边界>‘,re.S)
re.S 代表能够匹配到换行