我有一个随机生成的字符串:

polymer_str = "diol diNCO diamine diNCO diamine diNCO diamine diNCO diol diNCO diamine"

我想找到最长的“diNCO二醇”序列和最长的“diNCO二胺”序列。因此,在以上情况下,最长的“diNCO二醇”序列为1,最长的“diNCO二胺”序列为3。

我将如何使用python的re模块执行此操作?

提前致谢。

编辑:
我的意思是给定字符串的最长重复次数。因此,带有“diNCO diamine”的最长字符串为3:
二醇二NCO二胺二NCO二胺二NCO二胺二NCO二醇二NCO二胺

最佳答案

扩展Ealdwulfanswer:

可以在here中找到有关re.findall的文档。

def getLongestSequenceSize(search_str, polymer_str):
    matches = re.findall(r'(?:\b%s\b\s?)+' % search_str, polymer_str)
    longest_match = max(matches)
    return longest_match.count(search_str)

这可以写成一行,但是以这种形式变得可读性较差。

替代:

如果polymer_str很大,则使用re.finditer会提高内存效率。这是您可能的处理方式:
def getLongestSequenceSize(search_str, polymer_str):
    longest_match = ''
    for match in re.finditer(r'(?:\b%s\b\s?)+' % search_str, polymer_str):
        if len(match.group(0)) > len(longest_match):
            longest_match = match.group(0)
    return longest_match.count(search_str)
findallfinditer之间的最大区别是,第一个返回一个列表对象,而第二个则迭代Match对象。同样,finditer方法将稍微慢一些。

关于Python:重新找到最长序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1155376/

10-12 21:50