**正则表达式:匹配某些符合规则数据的代码**
## > 匹配单个字符
. 除了\n的所有\d 数字
\D 非数字
\w 数字字母下划线和汉字
\W 非数字字母下划线和汉字
[] 列举中的任意一个
\s 匹配空白,空格和tab键
\S 匹配非空白
数据有关联性可以用-
## > 匹配多个字符
* 匹配前一个字符出现0次或无限次+ 匹配前一个字符出现1次或无限次,即至少出现1次
?匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 修饰前一个字符出现m次
{m,} 修饰前一个字符最少出现m次,最多不指定
{,m} 修饰前一个字符最多出现m次,最少出现0次
{m,n}修饰前一个字符最少出现m次,最多n次
## > 匹配开头结尾
^ 表示以指定字符串开头
$ 表示以指定字符串开头
[^47] 除了47的字符都匹配
[^#] 除了#的字符都匹配
\. 表示转义特殊的正则表达式代码,转以后就没有其他的含义了
## 匹配分组
| 匹配左右任意一个表达式(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名 **(重点,多看代码)**
(?P=name) 引用别名为name分组匹配到的字符串 **重点,多看代码**
## r 的使用
1、r 表示原始数据,最主要的特点是不需要对反斜杠转义,就是一个反斜杠就是真正意义的反斜杠2、 建议写正则表达式匹配数据,在字符串前加上"r",就不用关心数据转义的问题了
3、(原来的数据什么样,匹配时还是什么样)
## re模块的高级用法:
* > re.serach()
参数:
# 1. 正则表达式
# 2. 要匹配的字符串
```
import re
match_obj = re.search('\d+', '水果共有6种,苹果13个')
if match_obj:
print(match_obj.group())
else:
print('匹配失败')
```
* > re.findall()
参数:
# 2. 要匹配的字符串
# 3. 返回匹配到结果列表 result
、、、
result = re.findall('\d+', '水果共有6种,苹果13个')
print(result)
、、、
* > 替换:re.sub()
将匹配到的数据进行替换
默认是全部替换
参数:1、正则2、替换的内容
3、要匹配的字符串
4、替换的次数
```
result = re.sub('\d+', '11', '阅读数:10 评论数:6', count=2)
```
* > splite()
根据匹配进行切割字符串,并返回一个列表
# 默认是全部替换
# 1、正则表达式
# 2、替换的内容
# 3、要匹配的字符
# 4、 count:替换的次数-->
```result = re.split(',|:', my_str, maxsplit=1)
```
python 正则默认是贪婪地默认根据正则多匹配数据