# 2.使用方法进行匹配操作,例如match result = re.match('正则表达式', '要匹配的字符串')
# 3.拿到匹配的结果数据,可以通过group方法获取 print(result.group())
# example result = re.match('正则', '正则表达式字符串') print(result.group)
匹配单个字符
代码
功能
.
匹配任意1个字符 (除了\n)
[]
匹配[]中列举的字符
\d
匹配数字,即0-9
\D
匹配非数字即不是数字
\s
匹配空白即空格,tab键
\S
匹配非空白
\w
匹配非特殊字符,即a-zA-Z、0-9、_、汉字
\W
匹配特殊字符,即非字母、非数字、非_汉字
1 2 3 4 5 6 7 8
import re ret = re.match(".","A") print(ret.group()) ret = re.match("zho..hou","zhouzhou") print(ret.group()) ret = re.match("zho..hou","zhoZUhou") print(ret.group()) # 没有特别的标识,正则里是严格区分字母的大小写
# 如果hello的首字符小写,那么正则表达式需要小写的h ret = re.match("h","hello Python") print(ret.group()) # 如果hello的首字符大写,那么正则表达式需要大写的H ret = re.match("H","Hello Python") print(ret.group()) # 大小写h都可以的情况 ret = re.match("[hH]","hello Python") print(ret.group()) ret = re.match("[hH]","Hello Python") print(ret.group()) ret = re.match("[hH]ello Python","Hello Python") print(ret.group()) # 这里的中括号表示,只要是括号里面的字符都可以满足匹配条件 # 例如匹配数字 ret = re.match("[0123456789]zhou zhou","6zhou zhou") print(ret.group()) ret = re.match("[0‐9]zhou zhou","2zhou zhou") print(ret.group()) # 下面括号里的写法表示匹配的数据是0到3和5到9 ret = re.match("[0‐35‐9]zhou zhou","5zhou zhou") print(ret.group()) # 所以,当我们想要匹配4的时候就会没有结果 ret = re.match("[0‐35‐9]zhou zhou","4zhou zhou") print(ret.group())
1 2 3 4 5 6 7
# \d 匹配数字 ret = re.match('第\d号', '第8号当铺') print(ret.group()) # \D 指定不匹配数字 ret = re.match('第\D号', '第八号当铺') print(ret.group()) # 除了上面匹配数字的方法,还能通\d进行匹配
匹配空白字符 \s
1 2 3 4 5 6 7 8 9 10
ret = re.match("周周\szhouzhou", "周周 zhouzhou") print(ret.group()) # 这里的\t属于空白字符 ret = re.match("周周\szhouzhou", '周周\tzhouzhou') print(ret.group()) # \S 匹配非空白字符 ret = re.match("周周\Szhouzhou", "周周*zhouzhou") print(ret.group()) ret = re.match("周周\Szhouzhou", '周周Wzhouzhou') print(ret.group())
匹配多个字符
代码
功能
*
匹配前一个字符出现0次或者无限次,即可有可无
+
匹配前一个字符出现1次或者无限次,即至少有1次
?
匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}
匹配前一个字符出现m次
{m,n}
匹配前一个字符出现从m到n次
这里的符号机制是只作用前面一个字符的匹配。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import re # [A‐Z][a‐z]* 表示大写字母匹配一次,小写字母随意匹配次数 ret = re.match("[A‐Z][a‐z]*","MdueD6Ddas") print(ret.group()) ret = re.match("[A‐Z][a‐z]*","AdwtrMnnM") print(ret.group()) ret = re.match("[A‐Z][a‐z]*","4Aabcdef") print(ret.group()) ret = re.match("[A‐Z][a‐z]*","db4Aabcdef") print(ret.group()) # [A‐Z][a‐z]+ 表示大写字母匹配一次,小写字母至少匹配一次 ret = re.match("[A‐Z][a‐z]+","MdueD6Ddas") print(ret.group()) ret = re.match("[A‐Z][a‐z]+","AdwtrMnnM") print(ret.group()) ret = re.match("[A‐Z][a‐z]+","a4Aabcdef") print(ret.group()) ret = re.match("[A‐Z][a‐z]*","Pb4Aabcdef") print(ret.group())
这里的星号和加号(* +)只表示匹配的次数
1 2
ret = re.match("https?", "http") print(ret.group())
{m}、{m,n}
1 2 3 4 5 6 7 8 9
ret = re.match("\d{8}","1384775830245678") print(ret.group()) # 从第一个满足条件的字符开始,匹配6到10次 ret = re.match("\d{6,10}","1384775830245678") print(ret.group()) ret = re.match("\d{6,10}","13d4775830245678") print(ret.group()) ret = re.match("\d{6,10}","1384775a30245678") print(ret.group())
import re # 匹配数字开头的数据 result = re.match("^\d.*", "3tisugou") if result: print(result.group()) else: print("匹配失败") # 匹配数字结尾的数据 result = re.match(".*\d$", "tisugou2") if result: print(result.group()) else: print("匹配失败") # 匹配数字开头和数字结尾的数据 result = re.match("^\d.*\d$", "9tisugou2") if result: print(result.group()) else: print("匹配失败")
除了指定字符以外都匹配
1 2 3 4 5 6 7 8 9 10 11
# 匹配一个除了zhou的字符 result = re.match("[^zhou]", "h") if result: print(result.group()) else: print("匹配失败") result = re.match("[^zhou]", "a") if result: print(result.group()) else: print("匹配失败")
匹配分组
分组数是从左到右的方式进行分配的,所以数据也是从左到右来匹配的。
1 2 3 4 5 6 7 8 9
# 匹配列表中的元素 lyst = ['a', 'b', 'e', 'd', 'p'] for i in lyst: # 匹配左右任意一个表达式 result = re.match(".+|[a-z]|\S", i) if result: print(result.group(), '匹配成功') else: print(i, '匹配失败')