使用正则表达式根据Wordle规则缩小字典
Using Regular Expression to narrow down dictionary based on Wordle rules
我正在尝试将 Wordle Solver 作为我的简历项目。我想通过使用 RegEx 缩小字典范围来开发一些单词建议。
是否可以编写 RegEx,使其在字典中搜索满足这 3 个条件的单词?
- 以字母 'C'
开头的单词
- 在单词
的任何地方都不包含字母'T'
- 单词 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.I
和 re.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.*$
我正在尝试将 Wordle Solver 作为我的简历项目。我想通过使用 RegEx 缩小字典范围来开发一些单词建议。
是否可以编写 RegEx,使其在字典中搜索满足这 3 个条件的单词?
- 以字母 'C' 开头的单词
- 在单词 的任何地方都不包含字母'T'
- 单词 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.I
和 re.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.*$