Python:re..find最长序列

发布于 2021-01-29 16:17:50

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

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

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

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

提前致谢。

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

关注者
0
被浏览
45
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    扩展Ealdwulf答案

    有关文档,请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)
    

    findall和之间的最大区别finditer是,第一个返回一个列表对象,而第二个则迭代Match对象。而且,该finditer方法将稍微慢一些。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看