扑克中的纸牌排名如下:
A>K>Q>J>T>9>8>7>6>5>4>3>2 # Ace, King, Queen, Jack, Ten, 9, ...
我现在必须在手中找到“高牌”的正则表达式如下:
>>> re.search('.*(A|K|Q|J|T|9|8|7|6|5|4|3|2)','2Q3AK').group(1)
'K'
是否可以在没有太多改动的情况下进行上述操作?我尝试将9-2编写为
[9-2]
,但似乎字符类需要按升序排列,在这种情况下,它将无法正确检测到高牌。以上示例的正确/最佳正则表达式是什么?注意:以上示例是错误的-正确答案应该是“ A”而不是“ K”。这是更新的尝试:
>>> re.search('.*(A)|.*(K)|.*(Q)|.*(J)|.*(T)|.*(9)|.*(8)|.*(7)|.*(6)|.*(5)|.*(4)|.*(3)|.*(2)', '2Q3AK').group(1)
'A'
最佳答案
为什么错了:正则表达式
re.search('.*(A|K|Q|J|T|9|8|7|6|5|4|3|2)','2Q3AK').group(1)
'K'
是贪婪的匹配。它为
.*
匹配尽可能多的字符,然后吐出最后一个字符:re.search('.*(A|Q|J|T|9|8|7|6|5|4|3|2|K)','KQ3A2').group(1)
'2'
作为框架挑战,您是否有特定原因需要使用
re
?似乎只搜索最高顺序的字符会更明确,并且可能更容易理解:order = 'AKQJT98765432'
hand = '2Q3AK'
highest = min(hand, key=order.index)
关于python - 用正则表达式在扑克手中找到“高牌”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58809816/