Skip to main content
 首页 » 编程设计

python之正则表达式:扑克牌解析器,N 的一种

2024年08月23日28zhengyun_ustc

我正在尝试编写一个 regex 来解析一手牌: 例如:

4C 4H 6H 4D AH 
4H 6H 4D 4C AH 
4C 6H 4D AH 4H 

我想要通用正则表达式来解析下面的每一行,如果它包含三次 4 则返回 true。到目前为止,我从我之前关于 sequence of repetition 的问题中得到了什么并且不考虑可以洗牌的事实。

到目前为止我尝试的是: 4\w((?:\w{2})?(?: 4\w)){2} - 它涵盖了几种情况,但不是全部。请帮我修正这个表达式。


编辑:

def check_card_series(hand, range): 
    #  4\w((?: \w{2})?(?: 4\w)){2} 
    regexp = "%s\w((?: \w{2})?(?: %s\w)){%d}" 
    result = False 
    for card in cards: 
        result = re.search(regexp % (card, card, range - 1), str(hand)) 
        if result: 
            return result 
    return result 

我在 Python 方法中使用了 regexp。你能帮我把事情分开,并告诉我一个更好的启发式做法吗?

请您参考如下方法:

我尝试编写正则表达式以便它能够 self 解释:

four = r'4\w ' 
not_four = r'[^4]\w ' 
not_four_seq = r'(%s)*' % not_four 
res = r'^%s(%s%s){3}$' % (not_four_seq, four, not_four_seq) 
if re.match(res, '7C 4H 4H 5D 4H' + ' '): 
    print 'OK'