扑克中的纸牌排名如下:

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/

10-16 18:39