我正在尝试编写一个 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'
