現在我們開始乙個乙個例子學習,把學習到的正規表示式進行綜合使用。這個例子使用正規表示式來檢查5
張撲克牌是否有效,為了顯示更好看,先寫乙個輸出函式:
def displaymatch(match):
if match is none:
return print(none)
return print('' % (match.group(), match.groups()))假定每一付牌要有
5張組成,使用
a表示王牌,
k表示國王,
q表示王后,j表示
jack,t
表示10
,2-9
表示相應的數字牌。下面的例子,就檢查這付牌是否有效:
valid = re.compile(r"^[a2-9tjqk]$")
displaymatch(valid.match("akt5q")) # valid
displaymatch(valid.match("akt5e")) # invalid.
displaymatch(valid.match("akt")) # invalid.
displaymatch(valid.match("727ak")) # valid.
結果輸出如下:
檢查一付撲克牌
none
none
這個例子裡,由於e
不存在,導致不合法;
akt只有
3張,達不到
5張所以也不合法。
正規表示式:r"^[a2-9tjqk]$"
,其中^
表示只從字串開始進行匹配;
表示匹配在中括號中任意的字元;
a2-9tjqk
表示字元集合,
2-9表示2到
9順序所有數字;{
5}表示至少匹配
5個字元,才算成功;
$表示詞尾前匹配。
在最後這手牌727ak
裡,會有兩個牌相同,那麼怎麼樣才可以把有相同的牌找出來,如下:
pair = re.compile(r".*(.).*\1")
displaymatch(pair.match("717ak")) # pair of 7s.
displaymatch(pair.match("718ak")) # no pairs.
displaymatch(pair.match("354aa")) # pair of aces.
結果輸出如下:
none
在這個例子裡,使用正規表示式r".*(.).*\1"
,點號表示任意字元;
*表示任意重複;
(.)是表示匹配乙個字元作為一組;
.*表示之間可以有任意字元;
\1表示與前面分組相同的字元。如果想獲取那乙個字元重複,可以使用
group
來訪問。
python 左右兩隻手交換撲克牌
示例 小明手裡有兩張牌,左手紅桃 k 黑桃 a,小明交換兩手的牌後,手裡分別是什麼?思路 先找到物件 小明,左手 右手 紅桃 k 黑桃 a 根據物件找出對應的類 人 手 牌 根據需要寫出相應的邏輯,很可能反過來完善類的設計 按照題目要求建立相關物件,呼叫相關方法,實現相關功能 撲克類 class p...
C 列印一副撲克牌
public enum pokercolor this.color,this.num 表示一副撲克牌的類 class pokers 定義乙個陣列來存放52張撲克牌 poker pokers new poker 52 用於計數建立的撲克牌個數 int index 0 一副撲克牌類的構造方法 建立一副撲...
模擬 湊一手牌,求牌型方案數。c
模擬型別題 有 a b 張撲克牌。每張撲克牌有乙個大小 整數,記為a,範圍區間是 0 到 a 1 和乙個花色 整數,記為b,範圍區間是 0 到 b 1 撲克牌是互異的,也就是獨一無二的,也就是說沒有兩張牌大小和花色都相同。一手牌 的意思是你手裡有5張不同的牌,這 5 張牌沒有誰在前誰在後的順序之分,...