Расширение 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
подход будет несколько медленнее.