目录
- 1 简介
- 2 限制匹配的字符(集)
-
- 2.1 匹配单个字符
- 2.2 匹配字符集中的某个字符
- 2.3 匹配字符集中不存在的字符
- 2.4 匹配任意(非)数字字符
- 2.5 匹配任意(非)普通字符
- 2.6 匹配任意(非)空字符
- 3 限制匹配起终点
-
- 3.1 匹配字符串开始位置
- 3.2 匹配字符串的结束位置
- 3.3 匹配(非)单词的边界位置
- 4 限制匹配的数量
-
- 4.1 匹配0次或多次
- 4.2 匹配1次或多次
- 4.3 匹配0次或1次
- 4.4 匹配出现精准次数
- 4.5 匹配出现模糊次数
- 5 其他元字符
-
- 5.1 匹配或关系
- 5.2 分组匹配
- 5.3 转义
- 6 总结
- 参考文献
1 简介
2 限制匹配的字符(集)
2.1 匹配单个字符
print(re.findall('张.','张三李四')) #输出['张三']
2.2 匹配字符集中的某个字符
# [abc#!中文]:表示匹配能匹配到其中任意一个字符即可。 # [0-9]:表示0~9任意一个数 # [a-z]:表示任意一个小写字母 # [A~Z]:表示任意一个大写字母 print(re.findall('[0-9]','abc123')) #输出['1','2','3']
2.3 匹配字符集中不存在的字符
print(re.findall('[^0-9]','abc123')) #输出['a', 'b', 'c'] print(re.findall('[^ ]+','port-9 Error #404# %@STD')) #输出['port-9', 'Error', '#404#', '%@STD']
2.4 匹配任意(非)数字字符
print(re.findall('d{1,5}','Mysql:3306; http:80')) #输出['3306', '80']
2.5 匹配任意(非)普通字符
print(re.findall('w+','server_port = 8888')) #+号含义见下文 #输出['server_port', '8888'] print(re.findall('W+','server_port = 8888')) #输出[' = ']
2.6 匹配任意(非)空字符
print(re.findall('S+','server_port = 8888')) #输出['server_port', '=', '8888'] print(re.findall('s+','server_port = 8888')) #输出[' ', ' ']
3 限制匹配起终点
3.1 匹配字符串开始位置
print(re.findall('^Jame','Jame hello')) #输出['Jame'] print(re.findall('^Jame','hello Jame')) #输出[],因为Jame不在字符串开头,故匹配不上。 print(re.findall('AJame','Jame hello')) #输出['Jame'] print(re.findall('AJame','hello Jame')) #输出[],因为Jame不在字符串开头,故匹配不上。
3.2 匹配字符串的结束位置
print(re.findall('Jame$','Jame hello')) #输出[],因为Jame不在字符串结尾,故匹配不上。 print(re.findall('Jame$','hello Jame')) #输出['Jame'] print(re.findall('JameZ','Jame hello')) #输出[],因为Jame不在字符串结尾,故匹配不上。 print(re.findall('JameZ','hello Jame')) #输出['Jame'] print(re.findall('^Jame$','Jame')) #输出['Jame'],完全匹配 print(re.findall('AJameZ','Jame')) #输出['Jame'],完全匹配
3.3 匹配(非)单词的边界位置
print(re.findall(r'bisb','This is a test.')) #输出['is'],此处输入的是句子中的单词is,而不是This中的is。 print(re.findall(r'Bisb','This is a test.')) #输出['is'],此处输入的是This中的is。
4 限制匹配的数量
当可能存在不同数量匹配情况时,默认规则下为贪婪算法,后续章节再分析贪婪算法与非贪婪算法(或者称为懒惰算法)。
4.1 匹配0次或多次
print(re.findall('wo*','wooooo~w!')) #输出['wooooo', 'w']。句末出现了w但是没有o,也是能够匹配上该模式。 print(re.findall('[a-zA-Z]*','How are you?')) #输出['How', '', 'are', '', 'you', '', ''],出现空字符,是因为*解析为0个字符。
4.2 匹配1次或多次
print(re.findall('wo+','wooooo~w!')) #输出['wooooo']。句末的w后面没有o,不能够匹配上该模式。
4.3 匹配0次或1次
print(re.findall('-?[0-9]+','Jame age 18, and -26')) #输出['18', '-26']。 print(re.findall('ab?','abbbb,abcda')) #输出['ab', 'ab', 'a']。
4.4 匹配出现精准次数
print(re.findall('1[0-9]{10}','Jame 18888888888')) #用于匹配手机号码 #输出['18888888888']。
4.5 匹配出现模糊次数
print(re.findall('[1-9][0-9]{5,10}','Jame 888888')) #用于匹配QQ号码 #输出['888888']。
5 其他元字符
5.1 匹配或关系
print(re.findall('com|cn','www.baidu.com/www.tmooc.cn')) #输出['com','cn']
5.2 分组匹配
5.3 转义
print(re.findall(r'-?d+.?d*','100, -100, 1.2, 1, -1.2')) #输出['100', '-100', '1.2', '1', '-1.2']
6 总结
参考文献
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试