常用正则表达式
\d 代表1个数字0-9
\D 代表一个非数字
\w 代表1个字符0-9 A-Z a-z
\W 代表1个非字符
\b 匹配一个单词边界
\B 匹配非单词边界
[注意]\bc:表示匹配以c开头的单词c,c\b:匹配以c为开头的单词c;/Bc:不以c开头匹配单词中所有的c,c\B:不以c结为匹配单词中所有的c
. 代表任意1个字符
\s 代表一个空格
. 代表一个.
() 字符串选择器(abc|cde|def)
[] 字符选择器
- | ,
[a-z] a到z的任意一个字符
[a|b|c] [abc] abc三个中的一个字符
[a,b,c]同上
{} 修饰符 通常修饰前面一个正则
\d{3,4} 最少3个数字最多4个数字
\d{3}必须是3位数字
\d{3,}最少3个数字最多无所谓
\d{,3} 最多3个数字
+ 修饰符 通常也修饰前面1个正则
\d+ 最少1个数字 最多无所谓
* 修饰符 通常也修饰前面1个正则
\d* 最少0个数字 最多无所谓
?修饰符 通常也修饰前面1个正则
\d? 最少0个字符 最多1个数字
? 将正则匹配模式改为非贪婪模式
^ 非
[^a] 此次不允许是a这个字母
^ 匹配方向
从左向右匹配
$匹配方向
从右向左匹配
^()$ 边界界定符
完整匹配整个字符串
python
常用方法:
表达式 | 说明 |
---|---|
compile() | 用于编译正则表达式,生成一个正则表达式( Pattern )对象 |
(常用) match() | 查看字符串的开头是否符合匹配模式,如果匹配失败,返回None |
search() | 扫描整个字符串并返回第一个成功的匹配 |
(常用) findall() | 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表 |
sub() | 替换字符串中的匹配项 |
# 导入re
import re
# 使用分组
match = re.match(r'(\d)(\d)(\d)','123')
match.groups() # ('1', '2', '3')
match.group(1) # '1'
match.group(2) # '2'
match.group(3) # '3'
match.group(0) # '123'表示一个整体
# \1...\9匹配第n个分组的内容
ma = re.match(r'(\d(\d(\d)))\1\2\3', '123123233')
ma.groups() # ('123', '23', '3')
# \1: 123[123]233
# \2: 123123[23]3
# \3: 12312323[3]
# ?:跳过分组
ma = re.match(r'(\d(?:\d(\d)))-\2', '647-7')
#?:在组2中,所以组2被跳过了,所以有两个分组
print(ma.groups()) # ('647', '7')
# 几个常用符号
# ?= 前向肯定界定符
re.findall(r'\b\w+(?=ing\b)','i am singing while you are dancing') # ['sing', 'danc']
# ?! 前向否定界定符
re.findall(r'\d{3}(?!\d)',"123sdf dd4567 890") # ['123', '567', '890']
# ?<= 后向肯定界定符
re.findall(r'(?<=\bre)\w+\b','reading a book') # ['ading'] 表示以re开头的单词的后面部分
# ?<! 后向否定界定符
re.findall(r'(?<![a-z])\d{7}',"88771234 b8001233 B8001232") # ['8877123', '8001232'] 表示匹配前面不是以字母开头的7位数字