*
:匹配前一個字符出現0次或者無限次,即可有可無+
:匹配前一個字符出現1次或者無線次,即至少有1次?
:匹配前一個字符出現1次或者0次,即要么有1次,要么沒有{m}
:匹配前一個字符出現m次{m,n}
:匹配前一個字符出現從m到n次
示例1: *
需求:匹配出,一個字符串第一個字母為大小字符,后面都是小寫字母並且這些小寫字母可有可無
import re
#注意是前一個字符
ret = re.match("[A-Z][a-z]*","M")
print(ret.group())
ret = re.match("[A-Z][a-z]*","AaBcDE")
print(ret.group())
ret = re.match("[A-Z][a-z]*","Aabcdef")
print(ret.group())
#運行結果
M
Aa
Aabcdef
示例2:+
需求:匹配出,變量名是否有效
import re
names = ["name1","_name","2_name","__name__"]
for i in names:
ret = re.match("[a-zA-Z_]+[\w]*",i)
if ret:
print("變量名 %s 符合要求" % ret.group())
else:
print("變量名 %s 非法" % i)
#運行結果
變量名 name1 符合要求
變量名 _name 符合要求
變量名 2_name 非法
變量名 __name__ 符合要求
示例3:?
需求:匹配出0到99之間的數字
import re
ret = re.match("[1-9]?[0-9]","7")
print(ret.group())
ret = re.match("[1-9]?\d","33")
print(ret.group())
ret = re.match("[1-9]?\d","09")
print(ret.group())
#運行結果
7
33
0 # 這個結果並不是想要的,利用$才能解決
示例4:{m}
需求:匹配出,8到20位的密碼,可以是大小寫英文字母、數字、下划線
import re
ret = re.match("[a-zA-Z0-9_]{6}","123a3g45678")
print(ret.group())
ret = re.match("[[a-zA-Z0-9_]{8,20}","1ad3123456addfcasdef")
print(ret.group())
#運行結果
123a3g
1ad3123456addfcasdef