我有一个非常大的单词表。如何使用 Unix(或者可能是 Python)查找符合特定字符共享标准的多个单词的实例?例如,我希望单词 1 和 2 具有相同的第四和第七个字符,单词 2 和 3 具有相同的第四和第九个字符,单词 3 和 4 具有相同的第二、第四和第九个字符。
例子:
aaadiigjlf
abcdefghij
aswdofflle
bbbbbbbbbb
bisofmlwpa
fsbdfopkld
gikfkwpspa
hogkellgis
可能会回归
abcdefghij
aaadiigjlf
fsbdfopkld
aswdofflle
编辑:为了澄清起见,我需要代码返回在给定位置共享相同字符的任何单词;我没有考虑特定的字符(如示例中给出的“d”和“g”)。此外,我希望它能够返回不符合所有标准的单词;例如,在给出的示例中,单词 1 和 4 共享第四个字符,但不一定是第二个、第七个和第九个字符。对于我以完成形式运行的程序,我希望它根据九个严格的字符共享标准返回一个非常小的单词列表(可能只有十个)。
答案1
使用grep
哪些用途常用表达:
# Find all lines where the fourth and seventh letter are "d" and "g"
grep '...d..g' somefile
# Find all lines where the fourth and ninth letters are "d" and "l"
grep '...d....l' somefile
如果你想执行两个都规则,你可以使用管道将它们链接在一起:
grep '...d..g' somefile | grep '...d....l'
您可以使用语法而不是 123 个点来减少正则表达式的详细程度和多个点{123}
,例如:
egrep '.{3}d.{2}g' somefile
请注意,随着正则表达式变得越来越复杂,您可能需要使用来egrep
支持某些语法,例如上面的重复语法。