寻找重复出现的模式

2023-11-22

假设我有一个具有重复模式的数字,即存在一串重复的数字,以便形成有问题的数字。例如,这样的数字可能是1234123412341234,通过重复数字创建1234.
我想做的是找到重复自身的模式来创建数字。因此,给定1234123412341234,我想计算1234(有可能4, 来表明1234重复4次创建1234123412341234)

我知道我可以这样做:

def findPattern(num):
    num = str(num)
    for i in range(len(num)):
        patt = num[:i]
        if (len(num)/len(patt))%1:
            continue
        if pat*(len(num)//len(patt)):
            return patt, len(num)//len(patt)

然而,这似乎有点太老套了。我想我可以用itertools.cycle比较两个周期的相等性,这并没有真正成功:

In [25]: c1 = itertools.cycle(list(range(4)))

In [26]: c2 = itertools.cycle(list(range(4)))

In [27]: c1==c2
Out[27]: False

有没有更好的方法来计算这个? (我愿意接受正则表达式,但我不知道如何在那里应用它,这就是为什么我没有将它包含在我的尝试中)

EDIT:

  1. 我不一定知道该数字有重复模式,所以我必须返回None如果没有的话。
  2. 现在,我只关心检测完全由重复模式组成的数字/字符串。然而,稍后,我可能还会对查找在几个字符之后开始的模式感兴趣:

magic_function(78961234123412341234)

会回来1234作为图案,4作为重复的次数,并且4作为输入中模式首次出现的第一个索引


(.+?)\1+

尝试这个。抓住捕捉。看demo.

import re
p = re.compile(ur'(.+?)\1+')
test_str = u"1234123412341234"

re.findall(p, test_str)

添加锚点和标志Multiline如果你想让正则表达式失败12341234123123,应该返回None.

^(.+?)\1+$

See demo.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

寻找重复出现的模式 的相关文章

随机推荐