介绍:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则 字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
话不多说,直接上代码
1. \d 匹配单个数字,相当于[0-9]
import re
#1.\d 匹配单个数字,相当于[0-9]
res = re.findall("\d","abc1ef23g")
print(res)
#输出结果:['1', '2', '3']
res = re.findall("[0-9]","abc1ef23g")
print(res)
#输出结果:同上
2.\D 匹配单个非数字字符,相当于[^0-9]
res = re.findall("\D","abc1ef23g")
print(res)
#输出结果:['a', 'b', 'c', 'e', 'f', 'g']
res = re.findall("[^0-9]","abc1ef23g")
print(res)
#输出结果:同上
3.\s 匹配空白字符串,如空格,换行\n,tab等,相当于[\f\n\r\t\v]
res = re.findall("\s","abc ef\ng\th")
print(res)
#输出结果:[' ', '\n', '\t']
res = re.findall("[ \f\n\r\t\v]","abc ef\ng\th")
print(res)
#输出结果:同上
4.\w 匹配单个字母,数字,或下划线,相当于[A-Za-z0-9_]
res = re.findall("\w","a_b12c!!_")
print(res)
#输出结果:['a', '_', 'b', '1', '2', 'c', '_']
res = re.findall("[A-Za-z0-9_]","a_b12c!!_")
print(res)
#输出结果:同上
5.[aeiou] 匹配字符串中的元音字符(中括号中的任意字符)
res = re.findall("[aeiou]","abcdefg12!!")
print(res)
#输出结果:['a', 'e']
6. . 匹配除换行符外的任意字符串
import re
res = re.findall(".","ab12\n!#")
print(res)
#输出结果:['a', 'b', '1', '2', '!', '#']
#加上re.S,使.能够匹配所有字符串
res = re.findall(".","ab12\n!#",re.S)
print(res)
#输出结果:['a', 'b', '1', '2', '\n', '!', '#']
7. *代表任意位, +代表至少一位,?代表可有可无
res = re.findall(".*","hello world!")
print(res)
#输出结果:['hello world!', '']
#备注说明:因为空字符串也算一个字符串,而*表示任意位,所以会多一个''匹配结果
res = re.findall(".+","hello world!")
print(res)
#输出结果:['hello world!']
#输出字符串中所有整数
res = re.findall("-?[0-9]+","ab12c-33d45678e99")
print(res)
#输出结果:['12', '-33', '45678', '99']
8.匹配多位数字
#1.匹配两位数字
res = re.findall("[0-9]{2}","1ab12cd345efg66h77!")
print(res)
#输出结果:['12', '34', '66', '77']
#2.匹配两位或三位数字
res = re.findall("\d{2,3}","1ab12cd345efg66h77!")
print(res)
#输出结果:['12', '345', '66', '77']
#3.匹配至少一位以上的数字
res = re.findall("\d{1,}","1ab12cd345efg66h77!")
print(res)
#输出结果:['1', '12', '345', '66', '77']
9.^ 匹配以.....开头, $匹配以....结尾, ^$以....开头且以.....结尾,相当于精确查找
#1.^ 以....开始
res = re.findall("^ang","zhangsan")
print(res)
#输出结果:[]
res = re.findall("^ang","angsan")
print(res)
#输出结果:['ang']
#2.$ 以....结束
res = re.findall("san$","zhangsan")
print(res)
#输出结果:['san']
res = re.findall("san$","zhangsan1")
print(res)
#输出结果:[]
#3.^$ 以...开始且以....结束
res = re.findall("^ang$","ang")
print(res)
#输出结果:['ang']
总结一下:
正则中的元字符说明:
1.[] 表示单个字符的原子表
[aoeiu] 表示任意一个元音字母
[0-9] 表示任意一位数字等价于 \d
[0-9][0-9] 00~99
[a-z][0-9]表示小写字和一位数字构成的两位字符
[a-zA-Z0-9_] 表示任意一位大小字母或数字 \w
2.[^] 表示除中括号内原子之外的任何字符 是[]的取反
[^0-9] 表示任意一位非数字字符 等价于 \D
[^a-z] 表示任意一位非小写字母
3.{m} 表示对前面原子的数量控制,表示是m次
[0-9]{4} 表示4位数字0000-9999 等价于\d{4}
[1][3-8][0-9]{9} 手机号码
[\-]?[0-9]+ 整数
4.{m,} 表示对前面原子的数量控制,表示是至少m次
[0-9]{2,} 表示两位及以上的数字 等价于\d{2,}
5.{m,n}表示对前面原子的数量控制,表示是m到n次
[a-z]{6,8} 表示6到8位的小写字母
6.* 表示对前面原子的数量控制,表示是任意次,等价于{0,}
7.+ 表示对前面原子的数量控制,表示至少1次,等价于{1,}
8.? 表示对前面原子的数量控制,表示0次或1次(可有可无) 等价于{0,1}
正整数:[1-9][0-9]*
整数: [\-]?[0-9]+
9.() 表示一个整体原子,【还有一个子存储单元的作用】。
也可以使用?:来拒绝子存储。 (?:.*?)
例如:(red) 字串red
(red|blue) 字串red或blue
(abc){2} 表示两个abc
| 表示或的意思
(red|blue) 字串red或blue
10.^ 用在正则单元块的开头处,表示必须以指定的开头
11.$ 用在正则单元块的结尾处,表示必须以指定的结尾
12.. 表示任意一个除换行符之外的字符
常用组合: .*? 或 .+? 表示最小匹配所有字符(拒绝贪婪匹配)
.{5}代表任意5位字符