2024-04-20 00:31:57 发布
网友
我有一个随机生成的字符串:
polymer_str = "diol diNCO diamine diNCO diamine diNCO diamine diNCO diol diNCO diamine"
我想找出“丁二醇”的最长序列和“丁二胺”的最长序列。因此,在上述情况下,最长的“丁二醇”序列是1,最长的“丁二胺”是3。
我如何使用python的re模块来完成这项工作?
提前谢谢。
编辑: 我的意思是给定字符串的最长重复次数。因此,含有“diNCO二胺”的最长字符串是3: 二元醇
import re pat = re.compile("[^|]+") p = "diol diNCO diamine diNCO diamine diNCO diamine diNCO diol diNCO diamine".replace("diNCO diamine","|").replace(" ","") print max(map(len,pat.split(p)))
在Ealdwulf的answer上展开:
有关re.findall的文档可以在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会更节省内存。你可以这样做:
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之间的最大区别是第一个返回列表对象,而第二个遍历匹配对象。而且,finditer方法会慢一些。
findall
finditer
我认为op需要最长的连续序列。您可以获得所有连续序列,如: seqs=re.findall(“(?)?:diNCO二胺+”,聚合物)
然后找出最长的。
在Ealdwulf的answer上展开:
有关
re.findall
的文档可以在here中找到。这可以写成一行,但在这种形式下可读性会降低。
备选方案:
如果
polymer_str
很大,那么使用re.finditer
会更节省内存。你可以这样做:findall
和finditer
之间的最大区别是第一个返回列表对象,而第二个遍历匹配对象。而且,finditer
方法会慢一些。我认为op需要最长的连续序列。您可以获得所有连续序列,如: seqs=re.findall(“(?)?:diNCO二胺+”,聚合物)
然后找出最长的。
相关问题 更多 >
编程相关推荐