ins*_*get 5 python regex pattern-recognition python-3.x
假设我有一个带有重复模式的数字,即存在一串数字,这些数字会重复以便产生相关数字.例如,可以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)
Run Code Online (Sandbox Code Playgroud)
然而,这看起来有点过于苛刻.我想我可以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
Run Code Online (Sandbox Code Playgroud)
有更好的计算方法吗?(我会对正则表达式开放,但我不知道如何在那里应用它,这就是为什么我没有在我的尝试中包含它)
编辑:
None如果没有,我必须返回.magic_function(78961234123412341234)
将1234作为模式返回,4作为重复的次数,并4作为模式首次出现的输入中的第一个索引
(.+?)\1+
Run Code Online (Sandbox Code Playgroud)
试试这个.抓住捕获.见演示.
import re
p = re.compile(ur'(.+?)\1+')
test_str = u"1234123412341234"
re.findall(p, test_str)
Run Code Online (Sandbox Code Playgroud)
Multiline如果您希望正则表达式失败12341234123123,则添加锚点和标志,应该返回None.
^(.+?)\1+$
Run Code Online (Sandbox Code Playgroud)
见演示.
| 归档时间: |
|
| 查看次数: |
1643 次 |
| 最近记录: |