Найти слова, которые были созданы путем удаления букв из заданной строки - PullRequest
1 голос
/ 02 июня 2019

Я пытаюсь написать код, используя regex и мой текстовый файл. Мой файл содержит эти слова построчно:

each
expressions
flags
in
from
given
line
of
once
lines
no

Моя цель такова; отображение слов, созданных путем удаления букв из заданной подстроки.

Например; если моя подстрока "flamingoes", мой вывод должен быть;

flags
in
line
lines
no

Потому что они создаются из моей подстроки путем удаления букв, и они также находятся в моем текстовом файле.

Я сделал много работ о регулярных выражениях, но меня заинтересовал этот вызов. Есть ли для этого решение regex ? Или только какое-нибудь регулярное выражение для этого?

Спасибо

Ответы [ 2 ]

1 голос
/ 02 июня 2019

По сути каждый символ не является обязательным.Простое

import re
word = 'flamingoes'
pattern = ''.join( c+'?' for c in word ) # ? Marks the letter as optional

for line in open('file').readLines():
    line = line.strip()
    m = re.match(pattern, line)

    if m:
        print(line)

должно хватить

1 голос
/ 02 июня 2019

Вы должны создать регулярное выражение для каждого слова, которое вы ищете. Выражение .*? между каждой буквой является не жадным шаблоном, который позволит избежать возврата (по крайней мере, некоторых из них) и ускорит поиск.

Например, регулярное выражение для слова «дано» будет g.*?i.*?v.*?e.*?n

import re

def hidden_words(needles, haystack):
    for needle in needles:
        regex = re.compile(('.*?').join(list(needle)))
        if regex.search(haystack):
            yield needle

needles = ['each', 'expressions', 'flags', 'in', 'from', 
           'given', 'line', 'of', 'once', 'lines', 'no']

print(*hidden_words(needles, 'flamingoes'), sep='\n')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...