Найти, какой термин повторяется в строке, если дано известное количество N вхождений в строке - PullRequest
0 голосов
/ 10 декабря 2018

Есть ли способ сделать следующее, не используя грубую силу или что-то в этом роде?

str = "abbcccddddefefef"
N = 3
repeated_term = func(str,N)

print(repeated_term )
> ['c','ef']


N = 2
term = func(str,N)

print(term)   
> ['b', 'dd', 'fe']    # Thanks to @blhsing for the correction!

и так далее ...

1 Ответ

0 голосов
/ 10 декабря 2018

Вы можете установить модуль регулярных выражений PyPi , который поддерживает шаблоны обратной ширины переменной ширины, чтобы использовать регулярное выражение, которое находит последовательности, которые повторяются ровно N - 1 раз:

import regex
def func(s, N):
    return regex.findall(r'(?=(.+?)(?:\1){%d}(?!\1))(?<!\1)' % (N - 1), s)

так что:

func("abbcccddddefefef", 3)

возвращает:

['c', 'ef']

и что:

func("abbcccddddefefef", 2)

возвращает:

['b', 'dd', 'fe']

Обратите внимание, что вы ожидаетевывод для N = 2 неверен, потому что 'dd' и 'fe' оба также встречаются ровно 2 раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...