匹配多個字符的相關格式
字符 | 功能 |
---|---|
* | 匹配前一個字符出現0次或者無限次,即可有可無 |
+ | 匹配前一個字符出現1次或者無限次,即至少有1次 |
? | 匹配前一個字符出現1次或者0次,即要么有1次,要么沒有 |
{m} | 匹配前一個字符出現m次 |
{m,n} | 匹配前一個字符出現從m到n次 |
示例1:*
需求:匹配出,一個字符串第一個字母為大小字符,后面都是小寫字母並且這些小寫字母可有可無
#coding=utf-8 import re ret = re.match("[A-Z][a-z]*","M") print(ret.group()) ret = re.match("[A-Z][a-z]*","MnnM") print(ret.group()) ret = re.match("[A-Z][a-z]*","Aabcdef") print(ret.group())
運行結果:
M
Mnn
Aabcdef
示例2:+
需求:匹配出,變量名是否有效
#coding=utf-8 import re names = ["name1", "_name", "2_name", "__name__"] for name in names: ret = re.match("[a-zA-Z_]+[\w]*",name) if ret: print("變量名 %s 符合要求" % ret.group()) else: print("變量名 %s 非法" % name)
運行結果:
變量名 name1 符合要求
變量名 _name 符合要求
變量名 2_name 非法 變量名 __name__ 符合要求
示例3:?
需求:匹配出,0到99之間的數字
#coding=utf-8 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位的密碼,可以是大小寫英文字母、數字、下划線
#coding=utf-8 import re ret = re.match("[a-zA-Z0-9_]{6}","12a3g45678") print(ret.group()) ret = re.match("[a-zA-Z0-9_]{8,20}","1ad12f23s34455ff66") print(ret.group())
運行結果:
12a3g4 1ad12f23s34455ff66