Regex 查找文本中的单词排列

Regex 查找文本中的单词排列,regex,grep,Regex,Grep,我试图为一个文本文件找到字符数相同但顺序不同的单词。例如我输入一个像“hyone”这样的单词,我想从文本文件中找到一个长度和字符数相同的单词。在这种情况下,“亲爱的”或“heony” 我已经尝试将grep与regex一起使用,但是我使用的代码返回的单词长度相同,但字符数不同 我使用了这个命令: grep-E“^[hyone]{5}$”list.txt 此命令返回5个字符长的单词,但其中包括并非由“hoooo”或“yeehe”等所有字符组成的单词。 请注意,给出的示例是虚构的,但它们总结了问题。不

我试图为一个文本文件找到字符数相同但顺序不同的单词。例如我输入一个像“hyone”这样的单词,我想从文本文件中找到一个长度和字符数相同的单词。在这种情况下,“亲爱的”或“heony”

我已经尝试将grep与regex一起使用,但是我使用的代码返回的单词长度相同,但字符数不同

我使用了这个命令:

grep-E“^[hyone]{5}$”list.txt

此命令返回5个字符长的单词,但其中包括并非由“hoooo”或“yeehe”等所有字符组成的单词。
请注意,给出的示例是虚构的,但它们总结了问题。

不是最好看的regexp,但对于您的示例,它是有效的:

\b(?=.*h)(?=.*y)(?=.*o)(?=.*n)(?=.*e).{5}\b
这一项检查字符h、y、o、n和e前是否有5个符号(将
更改为
\w
仅用于字符和数字,或使用
[a-z]
用于ASCII)

不过,在其他例子中可能不起作用。对于作为一行的使用,它的创建对于其他字符的检查可能有点棘手。因此,regexp可能不是解决此类问题的最佳方案。Levenshtein(正如Thomas所建议的;可能除了Soundex之外)可以工作得更好——不过,它们有点复杂


您可以在以下位置在线测试给定的regexp:

不是外观最好的regexp,但对于您的示例,它正在工作:

\b(?=.*h)(?=.*y)(?=.*o)(?=.*n)(?=.*e).{5}\b
这一项检查字符h、y、o、n和e前是否有5个符号(将
更改为
\w
仅用于字符和数字,或使用
[a-z]
用于ASCII)

不过,在其他例子中可能不起作用。对于作为一行的使用,它的创建对于其他字符的检查可能有点棘手。因此,regexp可能不是解决此类问题的最佳方案。Levenshtein(正如Thomas所建议的;可能除了Soundex之外)可以工作得更好——不过,它们有点复杂


您可以在以下位置在线测试给定的regexp:

这看起来不像是regex的任务。我想你应该读一下
Levenshtein distance
。这看起来不像是regex的任务。我想你应该读一读关于
Levenshtein distance
。更多的正则表达式。更多的正则表达式。