【发布时间】:2021-07-24 21:53:26
【问题描述】:
我正在运行这个函数来生成一个包含 256 个单词的单词表。然后我使用第二个声明过滤掉错误匹配,我只剩下 54 个单词。我正在寻找一种使用正则表达式或其他方式来匹配它的方法,以便它看起来干净而不那么草率。任何帮助将不胜感激。
GenerateStrings(new char[] { 'D', 'U' }, 8);
public IEnumerable<String> GenerateStrings(IEnumerable<char> characters, int length) {
if (length > 0) {
foreach (char c in characters) {
foreach (String suffix in GenerateStrings(characters, length - 1)) {
yield return c + suffix;
}
}
} else {
yield return string.Empty;
}
}
if (!eachWord.Contains("UUUUU") && !eachWord.Contains("DDDDD") && !eachWord.Contains("UUUUD") && !eachWord.Contains("DDDDU") && !eachWord.Contains("UUUDDDD") && !eachWord.Contains("DDDUUUU")) {
if (!eachWord.StartsWith("UUUU") && !eachWord.StartsWith("DDDD")) {
if (eachWord.StartsWith("UUDD") || eachWord.StartsWith("DDUU") || eachWord.StartsWith("DDUUU") ||
eachWord.StartsWith("UUDDD") || eachWord.StartsWith("DDDUU") || eachWord.StartsWith("UUUDD") ||
eachWord.StartsWith("DUUDD") || eachWord.StartsWith("DDDUU") || eachWord.StartsWith("DDDUUU") ||
eachWord.StartsWith("DUUDDD") || eachWord.StartsWith("DDDDUU") || eachWord.StartsWith("DUUUDD") ||
eachWord.StartsWith("UUUDD") || eachWord.StartsWith("UDDUU") || eachWord.StartsWith("UDDUUU") ||
eachWord.StartsWith("UUUDDD") || eachWord.StartsWith("UDDDUU") || eachWord.StartsWith("UUUUDD")) {
//good word
}
}
}
【问题讨论】:
-
过滤器背后的逻辑是什么?因为有类似的模式被包括在内和被排除在外。一些单词和示例输出或过滤器背后的逻辑将对我们有所帮助。
-
每次我试图解释它时没有人理解它所以我只是发布了过滤器..所以基本上任何连续的 2 或 3 位数字,如 UUDD 或 UUDDD 或 DDDUUU 但不是 UUDUU
-
你的意思是这样吗?
U{2,3}D{2,3}(?!D)|D{2,3}U{2,3}(?!U)regex101.com/r/rfiq69/1 -
@Thefourthbird 我得到 108 个结果而不是 54 个
-
你能把所有的名字都添加到regex101.com 链接并在这里分享并指出哪些应该匹配吗?