元字符匹配,对于爬虫十分重要
字符 | 功能 |
---|
. | 匹配任意一个字符(除了 \n ), \. 匹配点本身 |
[ ] | 匹配 [ ] 中列举的字符 |
\d | 匹配数字,即 0-9 |
\D | 匹配非数字 |
\s | 匹配空白,即 空格、tab键 |
\S | 匹配非空白 |
\w | 匹配单词字符,即 a-z、A-Z、0-9、_ |
\W | 匹配非单词字符 |
r的用法
字符串前面带上r,表示其中转义字符无效,均视为普通字符
三大方法
import re包
re.match, 从头开始匹配,匹配第一个命中项,如果第一个匹配失败,直接结束
re.search,全局匹配,匹配第一个命中项
re.findall,全局匹配,匹配全部命中项,返回一个 list
数量匹配
* | 匹配前一个规则的字符出现0至无数次,闭包 |
---|
+ | 匹配前一个规则的字符出现1至无数次, 正闭包 |
? | 匹配钱一个规则的字符出现0次或者1次 |
{m} | 匹配前一个规则的字符串出现m次 |
{m,} | 匹配前一个规则的字符串出现最少m次 |
{m,n} | 匹配前一个规则的字符串出现m到n次 |
边界匹配
^ | 匹配字符串开头 |
---|
$ | 匹配字符串结尾 |
\b | 匹配一个单词的边界 |
\B | 匹配非单词的边界 |
分组匹配
| | 匹配左右任意一个表达式 或 |
---|
( ) | 将括号中字符作为一个分组 |
案列演示
"""
正则表达式元字符匹配
"""
import re
r1 = '^[0-9a-zA-Z]{6,10}$'
s1 = '123458Ab'
print(re.findall(r1, s1))
r2 = '^[1-9][0-9]{4,10}$'
s2 = '01246789'
print(re.findall(r2, s2))
r3 = r'(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)'
s3 = 'a.b.c.d.f.g@163.com.za.as'
print(re.match(r3, s3))
输出结果自己在IDE跑一下,很简单。