首页 > 解决方案 > 如何使用 Python 3 列出所有与 Regex 对象匹配的模式?

问题描述

我刚开始编码,遇到了一个问题:当硬币翻转给定次数时,我必须找到条纹的数量(连续三次或更多次接收正面或反面)。这是我到目前为止得到的:

    import random, re
    lst=[]
    def coin_flip(b):
         for i in range(b):
              a=random.randint(0,1)
              if a==0:
                   lst.append("H")
              else:
                   lst.append("T")
    def check_for_streak(l):
         string="".join(l)
         Head=[]
         Tail=[]
         Head=re.compile(r'(H){3,}').findall(string)
         Tail=re.compile(r'(T){3,}').findall(string)
         return "The number of streaks is "+str(len(Head)+len(tail))

所以这里的问题是我希望列表 Head 和 Tail 包含 H 或 T 的条纹,而不是条纹本身中的“H”和“T”( Head=["HHHHH","HHHH",... ] 而不是 Head=["H","H",...]) 但似乎并非如此。有没有办法解决这个问题?

标签: python-3.x

解决方案


对于您的正则表达式,使用(H{3,})而不是(H){3,}

import random, re

def coin_flip(b):
    lst=[]
    for i in range(b):
        if random.randint(0,1):
            lst.append("H")
        else:
            lst.append("T")
    return lst

def check_for_streak(l):
     string="".join(l)

     head = re.compile(r'(H{3,})').findall(string)
     tail = re.compile(r'(T{3,})').findall(string)
     print(string)
     print(head)
     print(tail)
     return "The number of streaks is "+str(len(head)+len(tail))

lst = coin_flip(100)

print( check_for_streak(lst) )

打印(例如):

THTTTTHHHTHHHHHHHTHTTTTHHHTHTHTTHTHTTTTTTHHTTTTHTTHTHTTTHTHTTHHHTHTHHHTHHHTTTTHHTTHTHHHTTTHHTTTHHHHT
['HHH', 'HHHHHHH', 'HHH', 'HHH', 'HHH', 'HHH', 'HHH', 'HHHH']
['TTTT', 'TTTT', 'TTTTTT', 'TTTT', 'TTT', 'TTTT', 'TTT', 'TTT']
The number of streaks is 16

推荐阅读