正则表达式计算直接扑克牌?

有计算直接扑克牌的正则表达式吗?

我正在使用字符串来表示已排序的卡片,例如:

AAAAK#sssss = 4 aces and a king,all of spades.
A2345#ddddd = straight flush,all of diamonds.

在Java中,我正在使用这些正则表达式:

regexPair = Pattern.compile(".*(\\w)\\1.*#.*");
regexTwoPair = Pattern.compile(".*(\\w)\\1.*(\\w)\\2.*#.*");
regexThree = Pattern.compile(".*(\\w)\\1\\1.*#.*");
regexFour = Pattern.compile(".*(\\w)\\1{3}.*#.*");
regexFullHouse = Pattern.compile("((\\w)\\2\\2(\\w)\\3|(\\w)\\4(\\w)\\5\\5)#.*");
regexFlush = Pattern.compile(".*#(\\w)\\1{4}");

如何使用正则表达式计算直线(序列)值?

编辑

我打开另一个问题来解决同样的问题,但使用char的ascii值,
正则表达式是短的.细节here.

谢谢!

我不得不承认正则表达式不是我想要做的第一个工具.我几乎可以保证任何能够对未排序的手执行此操作的RE将比等效的过程代码更可怕且更不易读.

假设这些卡按面值排序(并且它们似乎是你所列出的正则表达式也不起作用),并且你必须使用正则表达式,你可以使用像

2345A|23456|34567|...|9TJQK|TJQKA

检测手的面值部分.

事实上,从我收集的here“标准”指针中,应按优先级递减的顺序检查以下内容

Royal/straight flush: "(2345A|23456|34567|...|9TJQK|TJQKA)#(\\w)\\1{4}"
Four of a kind:       ".*(\\w)\\1{3}.*#.*"
Full house:           "((\\w)\\2\\2(\\w)\\3|(\\w)\\4(\\w)\\5\\5)#.*"
Flush:                ".*#(\\w)\\1{4}"
Straight:             "(2345A|23456|34567|...|9TJQK|TJQKA)#.*"
Three of a kind:      ".*(\\w)\\1\\1.*#.*"
Two pair:             ".*(\\w)\\1.*(\\w)\\2.*#.*"
One pair:             ".*(\\w)\\1.*#.*"
High card:            (none)

基本上,那些与你的相同,除了我添加了皇家/同花顺和直线.如果你按顺序检查它们,你应该从手上获得最好的分数.这张高牌没有正则表达式,因为在那一点上,这是你唯一的得分.

我还将钢轮(环绕式)直线从A2345改为2345A,因为它们将按此方式进行分类.

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...