使用正则表达式根据Wordle规则缩小字典

Using Regular Expression to narrow down dictionary based on Wordle rules

我正在尝试将 Wordle Solver 作为我的简历项目。我想通过使用 RegEx 缩小字典范围来开发一些单词建议。

是否可以编写 RegEx,使其在字典中搜索满足这 3 个条件的单词?

  1. 以字母 'C'
  2. 开头的单词
  3. 在单词
  4. 的任何地方都不包含字母'T'
  5. 单词 overall 必须在某处包含字母 'E' 而不是第一个(单词以 'C' 开头)和第三个位置?

我的尝试如下,但我未能满足第三个要求。

[c][^\Wt][^\Wte][^\Wt][^\Wt]

这只是一个例子。你可以做一些小的辅助函数来让它更灵活。诸如“字母根本不在单词中”,“第三个位置的特定字母”之类的功能....

dic = {'words': ['value', 'cache', 'cacao', 'racer', 'house']}

filt = [x for x in dic['words'] if all([x[0].upper()=='C', 'T' not in x.upper(), 'E' in x.upper()])]

print(filt)
['cache']

带 if 条件的列表理解。所有条件都包含在 all() 中,只有 returns True 如果每个语句都是 True

下面假设您使用标志来启用不区分大小写和多行模式(因此 ^ 匹配行的开头和 $ 结尾)- re.Ire.M.

Word that starts with the letter 'C'

这只是 ^C.*$

Does not contain letter 'T' anywhere in the word

这可以通过积极的前瞻来实现(?=^[^T]*$)

The word overall must contain letter 'E' somewhere but not a first and third positions

这有点诡异,但可行:

  • 确保文本在 (?=.*E)
  • 某处包含 E
  • 确保E不在第三位(?!^..E)

将它们粘合在一起(并将 ^ 拉到前面):

^(?=[^T]*$)(?=.*E)(?!..E)C.*$