码迷,mamicode.com
首页 > 其他好文 > 详细

3.2.5.1 检查一手扑克牌

时间:2015-08-29 09:51:36      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:milang   python   正则表达式   

现在我们开始一个一个例子学习,把学习到的正则表达式进行综合使用。这个例子使用正则表达式来检查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表示jackt表示102-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表示29顺序所有数字;{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 深圳

版权声明:本文为博主原创文章,未经博主允许不得转载。

3.2.5.1 检查一手扑克牌

标签:milang   python   正则表达式   

原文地址:http://blog.csdn.net/caimouse/article/details/48084453

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!