我正在尝试使用 regex 和我的文本文件编写代码。我的文件逐行包含以下单词:
toolbar.addAction()
我的目的是;显示通过从给定的子字符串中删除字母而创建的单词。
例如;如果我的子字符串是each
expressions
flags
in
from
given
line
of
once
lines
no
,则我的输出应该是;
"flamingoes"
因为它们是通过删除字母从我的子字符串中创建的,而且它们也在我的文本文件中。
我做了很多有关正则表达式的作品,但我对这一挑战很感兴趣。是否有任何 regex 解决方案?还是仅对此使用任何正则表达式?
谢谢
答案 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)
足够