Python:查找浮点字符串

时间:2017-03-29 13:24:49

标签: python regex repeat

我正在尝试编写一个函数,该函数接收浮点数列表并确定该列表中是否存在重复的数字序列。如果有重复序列,则计算该序列中的数字。

这些例子是我希望我的功能

示例1:

function = '1.0 8.0 4.0 2.0 1.0 8.0 4.0 2.0 1.0 8.0 4.0 2.0 1.0 8.0'
result = find_repeating_sequence(function)
# repeating sequence = 1.0, 8.0, 4.0, 2.0
# so result should equal 4 in this case

示例2:

function = '1.0 8.0 4.0 1.0 2.0 1.0 8.0 4.0 1.0 2.0 1.0 8.0'
result = find_repeating_sequence(function)
# repeating sequence = 1.0, 8.0, 4.0, 1.0, 2.0
# so result should equal 5 in this case

示例3:

function = '1.0 8.0 4.0 2.0 1.0 7.0 6.0 3.0 2.0 5.0 9.0'
result = find_repeating_sequence(function)
# repeating sequence doesn't exist
# so result should equal None in this case

示例4:

function = '1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0'
result = find_repeating_sequence(function)
# repeating sequence = 1.0, 11.0
# so result should equal 2 in this case

到目前为止,我得到的是:

def find_repeating_sequence(function):
        regex = re.compile(r'(.+ .+)( \1)+')
        match = regex.search(function)
        result = match

       if result == None:
            print "There was no repeating sequence found!"
        else:
            print "Repeating sequence found!"
            print match.group(1)
            result = match.group(1)

       return result

这适用于match.group(1)给出重复序列的意义上的所有示例。但由于某种原因,len(match.group(1))未返回正确的数字。

与示例1类似:

print match.group(1)提供1.0 8.0 4.0 2.0

print len(match.group(1))给出了15

它也没有返回示例4的正确值: print match.group(1)提供1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0

print len(match.group(1))给出了35

我做错了什么?

更新

感谢下面的一个答案,我使用len(match.group(1).split())解决了print len(match.group(1))问题

但出于某种原因,如果 function = 1.0 2.0 4.0 8.0 1.0 2.0 4.0 8.0 1.0 2.0 4.0 8.0 1.0 2.0 4.0 8.0 print match.group(1)提供了1.0 2.0 4.0 8.0 1.0 2.0 4.0 8.0 而不是1.0 2.0 4.0 8.0

1 个答案:

答案 0 :(得分:1)

match.group()返回一个字符串,在这种情况下,len()返回字符串中的字符数。

你可以按空格分割你的字符串,然后计算元素的数量

回答更新: 你的表达是贪婪的,它试图找到最长的匹配。试试(.+? .+?)( \1)+?。限定符后面的问号使正则表达式变得懒惰:

https://regex101.com/r/1w7nxD/1