正则表达式

什么是正则表达式:

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

目的:

  1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):

  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

特点:

  1. 灵活性、逻辑性和功能性非常强;

  2. 可以迅速地用极简单的方式达到字符串的复杂控制。

  3. 对于刚接触的人来说,比较晦涩难懂。

元字符:

匹配边界:

^ :匹配字符串的开头,例如:^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 代表能够匹配到换行