字符 | 功能 |
---|---|
. | 匹配任意1个字符(除了\n) |
[] | 匹配[ ]中列举的字符 |
\d | 匹配数字,即0-9 |
\D | 匹配⾮数字,即不是数字 |
\s | 匹配空⽩,即 空格,\t-tab键 \n-换⾏ |
\S | 匹配⾮空⽩ |
\w | 匹配单词字符,即a-z、A-Z、0-9、_ |
\W | 匹配⾮单词字符 |
.
匹配任意单个字符(除\n)
[]
列举,匹配 []
中列举的内容
[ab]
匹配 a 或者 b
[a-z]
匹配所有的小写字母
[A-Z]
匹配大写字母
[0-9]
匹配数字
[a-zA-Z]
匹配所有的小写字母和大写字母
\d
匹配所有的数字 等价于 [0-9]
\D
非数字
\s
空格
\S
非空格
\w
匹配 字母、数字、下划线
[a-zA-Z0-9_]
\W
非数字、非字母、非下划线
*
表示前一个字符出现 0次或者 无限次
+
表示 前一个字符出现 1次或者 无限次
?
表示 前一个字符出现 0 次或者 1次 (要不不出现,要不只能出现一次)
{m}
表示前一个字符,连续出现 m次
{m,n}
表示前一个字符,连续出现最少m次,最多n次
^
表示 匹配 以后一个字符开头
^ 有两个作用:
1)匹配以 指定字符开头
^[a-zA-Z_]+\w # 必须以 小写字母、大写字母、下划线开头2)用在 [] 内部,用于取反
[^he] 匹配不含有 h 和 e 的字符
$
表示匹配 以前一个字符结尾
\d$ 以数字结尾
re模块的作用: python提供的用于正则操作的模块
re模块的使用步骤:
导入模块
import re
使用match() 方法进行检测
# 2、通过 match 方法,验证正则 # re.match("正则表达式", "要验证/检测的字符串") # match() 方法如果匹配成功,返回 match object 对象 # match() 方法如果匹配失败,返回 None # 正则字符串 要检测的内容 result = re.match("\w{4,20}@163\.com$", "hello@163.com")
判断是否检测/匹配成功
if result: print("成功") else: print("失败")
取出匹配的具体内容
result.group() 获取匹配的具体内容
字符 | 功能 |
---|---|
| | 匹配左右任意⼀个表达式 |
(ab) | 将括号中字符作为⼀个分组 |
\num | 引⽤分组num匹配到的字符串 |
(?P) | 分组起别名 |
(?P=name) | 引⽤别名为name分组匹配到的字符串 |
|
的作用:或者关系,多个正则表达式满足任意一个都可以
^[0-9]?[0-9]$|^100$ # ^[0-9]?[0-9]$ 满足或者 ^100$ 满足任意一个,返回值都是一个 match object 对象(匹配成功)
分组,整体匹配
result = re.match("\w{4,20}@(163|126|qq|sina)\.com$", "hello@126.com")把 @ .... ".com" 之间的内容整体进行匹配
提取子字符串
1 2
result = re.match("(\d{3,4})-(\d{7,8})", "010-12345678")`
result.group() 获取的是匹配的结果
result.group(1) 获取的是第一个括号中的内容
result.group(2) 获取的是第二个括号中的内容
引用 分组
\1 表示引用第一组
# result = re.match("<([a-zA-Z0-9]+)>.*</\\1>", "<html>asdbasldfj</html>") result = re.match("<([a-zA-Z0-9]+)><([a-zA-Z0-9]+)>.*</\\2></\\1>", "<html><h1>asdbj</h1></html>")
\\1
表示引用第一组 ,\\
是转义字符,转义后代表一个\
\\2
表示引用第二组
分组起别名
起名
?P
给分组起别名,别名为name1
引用别名
?P=name1 引用别名为 name1的分组
整体代码:
result = re.match("<(?P<name1>[a-zA-Z0-9]+)><(?P<name2>[a-zA-Z0-9]+)>.*</(?P=name2)></(?P=name1)>", "<html><h1>asdbj</h1></html>")
search() 在需要匹配的字符串中搜索要匹配的内容
result = re.search("\d+", "阅读次数:9999")
知道 match 和 search的区别
# 1)match 从需要检测.group的字符串的开头位置匹配,如果失败返回 None # 2)search 从需要检测的字符串中搜索满足正则的内容,有则返回match object对象
findall() 在需要匹配的字符串中查找所有满足正则的内容,返回值是列表
result = re.findall("\d+", "阅读次数:9999,转发次数:6666,评论次数:38")
sub("正则表达式", "新的内容", "要替换的字符串") 字符串替换(按照正则,查找字符串并且替换为指定的内容)返回值是替换后的字符串
result = re.sub("\d+", "10000", "阅读次数:9999,转发次数:6666,评论次数:38")
split("正则表达式", "待拆分的字符串") 按照正则拆分字符串,返回值是一个列表
result = re.split("