查找通过删除给定字符串中的字母而创建的单词

时间:2019-06-02 10:52:24

标签: python regex string python-regex

我正在尝试使用 regex 和我的文本文件编写代码。我的文件逐行包含以下单词:

toolbar.addAction()

我的目的是;显示通过从给定的子字符串中删除字母而创建的单词。

例如;如果我的子字符串是each expressions flags in from given line of once lines no ,则我的输出应该是;

"flamingoes"

因为它们是通过删除字母从我的子字符串中创建的,而且它们也在我的文本文件中。

我做了很多有关正则表达式的作品,但我对这一挑战很感兴趣。是否有任何 regex 解决方案?还是仅对此使用任何正则表达式?

谢谢

2 个答案:

答案 0 :(得分:1)

您应该为要查找的每个单词创建一个正则表达式。每个字母之间的表达式.*?是一个非贪婪模式,它将避免回溯(至少其中一些回溯),并使搜索更快。

例如,单词“ given”的正则表达式为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')

答案 1 :(得分:1)

基本上每个字符都是可选的。一个简单的

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)

足够