例如:0571-23123345-9527,这三个子模式用固定字符连接
2、各个部分的字符分类是什么这3个子模式都是数字类型,可以用d,现在就可以写出模式d-d-d
3、各个子模式如何重复第1个子模式重复3-4次,第2个子模式重复7-8次,第3个子模式重复3-4次
加上次数限制之后,规则可以表示为d{3,4}-d{7,8}-d{3-4}
是否要求在某特定字符附近
5、是否有内部的限制是否要求是以某特定字符在某位置(例如要求以‘1’开头,或者以‘9527’结尾)
二、正则表达式的语法分类字符规则
| 正则 | 匹配 |
|---|---|
| a,b,c,1,2,3,- | 字符常量,一般直接代入正则表达式 |
| d | 一个数字 |
| D | 一个非数字字符 |
| s | 一个空格 |
| S | 一个非空格 |
| w | 一个任意字母,数字,下划线字符 |
| W | 一个除了字母,数字,下换线以外的任意字符 |
| [abcf] | a,b,c,f中的任意一个字符 |
| a-e | 范围:从a到e中的任意一个字符 |
| ^a-d | ^:取反。除了a,b,c,d以外的任意一个字符 |
| b | 退格符号 |
| . | 通配符,除了换行n之外的任何一个字符 |
重复次数-量词
| 正则 | 匹配 |
|---|---|
| * | 0或多个 |
| + | 1个或者多个 |
| ? | 0个或者1个 |
| {2} | 2个 |
| {2,5} | 2到5个 |
| {2,} | 至少2个 |
| {,5} | 最多5个 |
位置
| 正则 | 匹配 |
|---|---|
| ^ | 字符串的开头 |
| A | 字符串开头,忽略m标记(m标记代表跨行) |
| $ | 字符串行尾 |
| Z | 字符串行尾,忽略m标记 |
| b | 单词边界 |
| B | 非单词边界 |
| (?=…) | 匹配在某指定字符串之后的位置 |
| (?!..) | 匹配在…不出现之后的位置 |
| (?<=…) | 匹配在…出现之前的位置 |
| (? | 匹配…不出现在之前的位置 |
分组:把一个正则表达式分成几个部分,这样就可以重复某个分组
| 正则 | 匹配 |
|---|---|
| (…) | 捕获一个组 |
| (?P…) | 捕获某组名为Y |
| (?:…) | 不捕获某组 |
| Y | 匹配第Y个匹配到的组 |
| (?P=Y) | 匹配名为Y的组 |
| (?#…) | 注释 |
特殊字符
| 正则 | 匹配 |
|---|---|
| n | 换行符 |
| r | 回车符 |
| t | tab符号 |
| YYY | 八进制符号YYY |
| xYY | 16进制符号 |
正则表达式语法规则中比较常用的还是字符规则和重复次数以及位置,所以重点记这三个表。
三、Python的re模块学习python中的re模块具有如下几个函数:
1、查找
- search: 查找负荷模式的字符,只返回第一个,返回Match对象。
- match: 与search相同,只是从头开始匹配。
- findall: 返回所有符合的字符串列表
- finditer: 返回一个迭代器,其中包含所有的匹配,也就是Match对象
2、替换
- sub: 替换匹配的字符串,返回替换完成的文本。
- subn: 替换匹配的字符串,返回替换完成的文本和替换的次数。
3、分割
- split: 用匹配表达式的字符串做分隔符分割原字符串。
4、编译
- compile: 把正则表达式编译成一个对象,方便以后使用。
#一般固定的字符串不使用正则表达式也可以做到,只需要借用字符串的in方法就可以
#例如:text='tel:178506597623,体重:144,学号:123456,密码:9527'
import re
text='tel:178506597123,体重:144,学号:123456,密码:9527'
#使用字符串方法:
target = '123456'
if target in text:
print('yes')
else:
print('no')
import re
print(re.findall(r'123',text))
#['123', '123']
#此处使用findall是为了避免文本中出现多个123,可以看到运行结果会把文本中所有的
#目标字符串都匹配出来。
2、匹配出同类型字符
#l2:一类字符 #找出所有的数字 text = text='tel:178506597123,体重:144,学号:123456,密码:9527' print(re.findall(r'd+',text)) #d代表数字。后面的+代表出现一个或多个 #找出所有的字符3、重复的某一类字符
#l3 : 重复某一类字符 text='tel:178506597123,体重:144,学号:123456,密码:9527' print(re.findall(r'd+',text))4、比对字符串+数字的组合
#l4 组合l2
#找出座机号码
text='tel:1785-06597123,体重:144,学号:123456,密码:9527'
print(re.findall(r'd{4}-d{8}',text))
5、外部约束,限制位置
#l6 限定位置
#在句子开头的手机号码,或者座机号码
text = '12345678910,tel2:1785-06597,体重:144,学号:123456,密码:9527'
print(re.findall(r'^d{4}-d{8}|^d{11}',text))
6、内部约束,限制字符串的格式
#l7 内部约束
#找出形如abc,abc的前后三个字母重复的字符串
text='barbar carcar harhel'
print(re.findall(r'(w{3})(1)',text))



