re模块
在Python中需要通过正则表达式对字符串进行匹配的时候,就需要用到re模块
re的使用:
# 导入re模块
import re
# 使用match方法进行匹配操作
result = re.match(正则表达式,要匹配的字符串)
# 使用group方法来提取数据
result.group()
re.match() 能够匹配出以xxx开头的字符串
re.search() 函数会在字符串内查找匹配的字符,只要找到第一个匹配,然后会返回
匹配字符
(一) 匹配单个字符
. 匹配任意1个字符(除了\n)
[] 匹配[ ]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即 空格,tab键
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
(二) 匹配多个字符
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,n} 匹配前一个字符出现从m到n次
(三) 匹配开头结尾
^ 匹配字符串开头
$ 匹配字符串结尾
(四) 匹配分组
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串
(五) 正则re模块的高级用法
-
findall
# 返回string中所有与pattern相匹配的全部字串,返回形式为列表组。 re.findall(pattern, string[, flags])
-
sub 将匹配到的数据进行替换
import re ret = re.sub(r"\d+", "666", "python = "857") print(ret) # 运行结果: python = 666
-
split 根据匹配进行切割字符串,并返回一个列表
import re # 用:或者空格来切割 ret = re.split(r":| ","info:xiaoZhang 18 guangdong") print(ret) 运行结果: ['info', 'xiaoZhang', '18', 'guangdong']
贪婪与非贪婪
+默认是贪婪的 只需要在右侧加上一个?就变成了非贪婪
贪婪是指尽可能的多匹配字符
非贪婪是指尽可能的少匹配字符