какая-то двухбуквенная последовательность повторяется 3 раза? «удовлетворенность» и «поддержание» являются такими словами - PullRequest
0 голосов
/ 13 марта 2020

Сколько слов содержат некоторую двухбуквенную последовательность, повторенную 3 раза? Например, «contentment» и «maintenance» - это такие слова, потому что «contentment» имеет последовательность «nt», повторенную три раза, а «maintenance» имеет последовательность «in», повторенную три раза.

Это мой код :

 len([f for f in file if re.match(r'(.*?[a-z]{2}.*?){3}',f)])

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Вот простое регулярное выражение:

.*(\w{2}).*\1.*\1

Он захватывает две буквы в группе с (\w{2}), и тогда эта же группа с одинаковыми буквами должна появиться в два раза больше с \1.

Вот пример в действии:

import re

text = """
How many words contain some two-letter sequence repeated 3 times? For example, "contentment" and "maintaining" are such words because "contentment" has the sequence "nt" repeated three times and "maintaining" has the sequence "in" repeated three times.
"""


def check(word):
    return re.match(r".*(\w{2}).*\1.*\1", word)


def main():
    for word in text.split():
        if check(word):
            print(word)


main()
1 голос
/ 13 марта 2020

Вы можете использовать

\b(?=\w*(\w{2})(?:\w*\1){2})\w+

См. Демоверсию regex .

Подробности

  • \b - граница слова
  • (?=\w*(\w{2})(?:\w*\1){2}) - за которой сразу следует 0+ слов символов, затем в группу 1 включаются два символа слов, а затем должно быть два повторения любых символов 0+ слов с последующим то же значение, что и в группе 1
  • \w+ - использует одно или несколько символов слова.

См. Python demo :

import re

text = "contentment and maintaining are such words"
print ( [x.group() for x in re.finditer(r'\b(?=\w*(\w{2})(?:\w*\1){2})\w+', text)] )
# =>  ['contentment', 'maintaining']
print ( len([x.group() for x in re.finditer(r'\b(?=\w*(\w{2})(?:\w*\1){2})\w+', text)]) )
# => 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...