元字符匹配,对于爬虫十分重要
字符 |
功能 |
. |
匹配任意一个字符(除了 \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跑一下,很简单。