目录
“ ?” ——匹配前一个字符出现一次或0次,即要么有一次,要么没有
一、正则基础
- 导入模块:import re
- 使用math方法进行匹配操作
res = re.match(正则表达式,要匹配的字符串)
re.match()从字符串的开始位置进行匹配,配对成功返回match对象。,没有匹配成功返回None
- 匹配到数据,使用group方法获取数据
print(res.group())
示例:
1、匹配单个字符
-
“.”——匹配任意一个字符(除了\n之外)
-
“[]”——匹配[]中列举的字符
下图报错原因:由于没有匹配到元素,之后又调用了group()方法造成的。
-
“\d”——匹配数字
0,1,2,3,4,5,6,7,8,9
-
“\D”——匹配非数字,即不是数字
-
“\s”——匹配空白,即空格和tab键
-
“\S”——匹配非空白
-
“\w”——匹配单词字符
a-z,A-Z,0-9,_(下划线),汉字
-
“\W”——匹配非单词字符
2、匹配多个字符
-
“ * ” ——匹配前一个字符出现0次或无限次
-
“ + ” ——匹配前一个字符出现一次或无限次
-
“ ?” ——匹配前一个字符出现一次或0次,即要么有一次,要么没有
-
“{m}” ——匹配前一个字符出现m次
-
“{m,n}”——匹配前一个字符出现从m次到n次(m<n)
3、匹配开头结尾
-
“ ^ ” ——匹配字符串开头
^表示以什么开头,表示对什么取反。
^在[]外表示由[]中的各个字符开头就匹配成功
^[ab] :表示以'a'或'b'开头就匹配成功
-
“ $ ” ——匹配字符串结尾
4、不匹配
-
^在[]中表示不匹配
5、总结
- ‘abc’:表示字符串开头有abc就匹配成功
- '[abc]':表示以字符串开头有'a'或'b'或'c'就匹配成功
- '^[abc]':表示由'a'或'b'或'c'开头就匹配成功
- '[^abc]':表示匹配除了'a'、'b'、‘c’之外的字符
6、匹配分组
-
“ | ”——匹配左右任意一个表达式(从左到右进行匹配)
-
(ab)——括号中字符作为一个分组
-
\num——引用分组num匹配到的字符串
-
(?P<name>)分组起别名
(?P=name)引用别名为name分组匹配到的字符串
二、正则的高级用法
-
search()
会扫描整个字符串并返回第一个成功的匹配
- search()和match()的区别:match()从开始位置匹配;search()扫描全部,找到第一个匹配成功的数据。
-
findall()——列表形式返回字符串
以列表形式返回匹配到的字符串
从头到尾匹配,找到所有匹配成功的数据,返回一个列表。
-
sub()——数据替换
将匹配到的数据进行替换
语法:sub(正则表达式,新内容,字符串,指定替换的次数)
- 正则表达式代表需要被替换的,也就是字符串里的旧内容
-
split()——切割字符串
根据匹配进行切割字符串,并返回一个列表
语法:split(正则表达式,字符串,指定最大分割次数)
三、贪婪匹配和非贪婪匹配
贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配。
非贪婪匹配:在满足匹配时,匹配尽可能短的字符串,使用“ ? ”来表示非贪婪匹配。
- 在 *,+,{m,n}等后面加上“?”表示使贪婪变为非贪婪
四、原生字符串
正则表达式中,匹配字符串中的字符“ \ ”,需要四个反斜杠:\\\\