正则表达式
原子
正则表达式最基础的组成单位,每个正则表达式至少包含一个原子。常见的原子类型有:
- 普通字符
- 非打印字符(换行符\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 |
这个例子可以将网站中的所有出版社爬下来并保存到文件中。正则表达式中.*?的作用是使用懒惰模式来匹配任意字符。