re模块的三个主要方法
re.match(),从头开始匹配,匹配第一个命中项
re.search(),全局匹配,匹配第一个命中项
re.findall(),全局匹配,匹配全部的命中项
单字符匹配
字符 | 功能 |
---|---|
. | 匹配任意一个字符(除了\n), \.匹配点本身 |
[] | 匹配[]中列举的字符 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字 |
\s | 匹配空白,即空格,tab键 |
\S | 匹配非空白 |
\w | 匹配单词字符,即a-z,A-Z,0-9,_(包括下划线不要忽略) |
\W | 匹配非单词字符 |
实例:
import re
s = "@@python3 ##csdn!!!"
# 找出全部数字
result = re.findall(r'\d', s) # 字符串前面带上r标记,表示字符串中转义字符无效
print(result)
# 找出特殊字符
result = re.findall(r'\W', s)
print(result)
# 找出全部英文字母
result = re.findall(r'[a-zA-Z]', s) # [] 中可以写a-zA-Z0-9以及单个字符组合如[AHzZ09]
print(result)
数量匹配
字符 | 功能 |
---|---|
* | 匹配前一个规则的字符出现0至无数次 |
+ | 匹配前一个规则的字符出现1至无数次 |
? | 匹配前一个规则的字符出现0次或1次 |
{m} | 匹配前一个规则的字符出现m次 |
{m,} | 匹配前一个规则至少出现m次 |
{m,n} | 匹配一个规则出现m到n次 |
边界匹配
字符 | 功能 |
---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
\b | 匹配一个单词的边界 |
\B | 匹配非单词边界 |
分组匹配
字符 | 功能 |
---|---|
| | 匹配左右任意一个表达式 |
() | 将括号中字符作为一个分组 |
实例:
# 匹配账号,只能由字母和数字组成,长度限制为6-10位
r = '^[a-zA-Z0-9]{6,10}$' # 正则里面不要随意加空格
s = '1234567a'
print(re.findall(r, s))
# 匹配QQ号,要求纯数字。长度5-11,第一位不为0
r = '^[1-9][0-9]{4,10}$'
s = '0288923439'
print(re.findall(r, s))
# 匹配邮箱地址,仅允许qq,163,gmail三种格式的邮箱
r = r'(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)'
s = 'abc.bd@qq.com'
print(re.findall(r, s)) # 如果正则表达式里有括号分组,使用findall会把每一个分组列出来 输出:[('abc.bd@qq.com', '.bd', 'qq', '.com')]
print(re.match(r, s)) # 输出:<re.Match object; span=(0, 13), match='abc.bd@qq.com'>