<[^/][^>]*[^/]>确实可以避免匹配到<br/>这样的字符,但是又会放过<u>这样的字符,为什么呢,刚开始还没想明白,其实是因为<[^/][^>]*[^/]>这样的书写方式,其实最少要求的字符必须有三个才会匹配的,而u却只有一个字符。
括号的使用 15位和18位身份证的匹配
>>> idCardRegex = r"^[1-9]\d{14}(\d{2}[0-9x])?$"
#这段正则表达式先匹配1-9其中的一个数字,因为身份证开头不能是零,之后匹配14个数字,这样就构成15位的身份证,另外三个则是用括号括起来整体出现的,要不不出现,要不一起只出现一次,相当于几个字符已经被捆绑起来了
>>> re.search(idCardRegex,"110101198001017032") != None
True
>>> re.search(idCardRegex,"11010119800101703x") != None
True
>>> re.search(idCardRegex,"110101198001017") != None
True
>>> re.search(idCardRegex,"11010119800101x") != None
False
多选结构,一般是由()和|组成,但是如果没有括号出现,依然为多选结构,但有时候也会出现错误
多选结构可以应对多种情况的出现,下面的示例是匹配0-255之间的字符串
>>> partRegex = r"^([0-9]|[0-9]{2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$"
>>> re.search(partRegex, "0") != None
True
>>> re.search(partRegex,"98") != None
True
>>> re.search(partRegex,"01") != None
True
>>> re.search(partRegex,"001") != None
False
>>> partRegex = r"^([0-9]|[0-9][0-9]{2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$"
>>> re.search(partRegex,"001") != None
True
同时,也可以匹配特殊的时间以及手机电话号码的匹配
一般情况下,匹配完成之后,匹配结果默认存在编号为0的分组