正则表达式
原子
正则表达式最基础的组成单位,每个正则表达式至少包含一个原子。常见的原子类型有:
- 普通字符
- 非打印字符(换行符\n, tab\t)
- 通用字符(
\w
用来匹配任意的一个字母数组下划线,\d
用来匹配任意一个十进制数,\s
用来匹配任意一个空白字符,\W
用来匹配与\w
互补的字符,\D
与\S
也同样是\d
与\s
取非) - 原子表(定义一组平等的原子,例如
[jst]
,在应用的时候可以像pattern = 'pyth[jst]n'
一样使用)
re.search(规则,对象)
是从内容中按照规定的规则搜索内容的函数。
元字符
正则表达式中具有一些特殊含义的字符。
.
:用来匹配任意一个字符^
:用来匹配字符串开始的位置,另如[^]
这样的括号中的^
表示的是取非运算$
:用来匹配字符串结束的位置*
:用来匹配零次一次以及多次其之前的原子,例如's*'
?
:用来匹配零次或者一次其之前的原子,例如's?'
+
:用来匹配一次或者多次其之前的原子,例如's+'
{3}
:前面的原子恰好出现3次,例如't{3}'
,如果打括号内有逗号,例如't{3,}'
,则表示前面的原子至少出现了3次。如果是't{3,7}'
则表示至少出现3次,至多出现7次|
:模式选择符或()
:(组合),匹配括号内的任意正则表达式,并标识出组合的开始和结尾。匹配完成后,组合的内容可以被获取
模式修正符
模式修正符,即可以在补发彼岸正则表达式的情况下,通过模式修正符改变正则表达式的含义,从而实现一些匹配结果的调整等功能。
re.I
:忽略大小写re.M
:多行匹配re.L
:本地化识别匹配re.U
:根据Unicode字符解析re.S
:使.
也能够匹配换行符
贪婪模式和懒惰模式
贪婪模式的核心是尽可能多的去匹配,懒惰模式的核心则是尽可能少的去匹配。
例如贪婪模式有pat1 = 'p.*y' #greedy
,而懒惰模式则为pat2 = 'p.*?y' #lazzy
。
正则表达式函数
正则表达式函数有re.match()
函数,re.search()
函数,re.fullmatch()
函数和re.sub()
函数等等。
re.search()
:扫描整个字符串找到匹配样式的第一个位置,并返回一个相应的匹配。如果没有匹配,就返回一个 None
。
re.match()
:如果 string 开始的0或者多个字符匹配到了正则表达式样式,就返回一个相应的匹配对象。如果没有匹配,就返回一个 None
。
re.fullmatch()
:如果整个 string 匹配到正则表达式样式,就返回一个相应的匹配对象。如果没有匹配,就返回一个 None
。使用的时候例如re.compile(pattern).findall()
。
利用正则表达式的爬虫小例子
1 | import re |
这个例子可以将网站中的所有出版社爬下来并保存到文件中。正则表达式中.*?
的作用是使用懒惰模式来匹配任意字符。