现在我们开始一个一个例子学习,把学习到的正则表达式进行综合使用。这个例子使用正则表达式来检查5张扑克牌是否有效,为了显示更好看,先写一个输出函数:
def displaymatch(match):
if match is None:
return print(None)
return print(‘<Match: %r, groups=%r>‘ % (match.group(), match.groups()))假定每一付牌要有5张组成,使用a表示王牌,k表示国王,q表示王后,j表示jack,t表示10,2-9表示相应的数字牌。下面的例子,就检查这付牌是否有效:
valid = re.compile(r"^[a2-9tjqk]{5}$")
displaymatch(valid.match("akt5q")) # Valid
displaymatch(valid.match("akt5e")) # Invalid.
displaymatch(valid.match("akt")) # Invalid.
displaymatch(valid.match("727ak")) # Valid.
结果输出如下:
检查一付扑克牌
<Match: ‘akt5q‘, groups=()>
None
None
<Match: ‘727ak‘, groups=()>
这个例子里,由于e不存在,导致不合法;akt只有3张,达不到5张所以也不合法。
正则表达式:r"^[a2-9tjqk]{5}$",其中^表示只从字符串开始进行匹配;[]表示匹配在中括号中任意的字符;a2-9tjqk表示字符集合,2-9表示2到9顺序所有数字;{5}表示至少匹配5个字符,才算成功;$表示词尾前匹配。
在最后这手牌727ak里,会有两个牌相同,那么怎么样才可以把有相同的牌找出来,如下:
pair = re.compile(r".*(.).*\1")
displaymatch(pair.match("717ak")) # Pair of 7s.
displaymatch(pair.match("718ak")) # No pairs.
displaymatch(pair.match("354aa")) # Pair of aces.
结果输出如下:
<Match: ‘717‘, groups=(‘7‘,)>
None
<Match: ‘354aa‘, groups=(‘a‘,)>
在这个例子里,使用正则表达式r".*(.).*\1",点号表示任意字符;*表示任意重复;(.)是表示匹配一个字符作为一组;.*表示之间可以有任意字符;\1表示与前面分组相同的字符。如果想获取那一个字符重复,可以使用group来访问。
蔡军生 QQ:9073204 深圳
版权声明:本文为博主原创文章,未经博主允许不得转载。