我正在尝试理解如何匹配存储在数组中的特定字符串(该字符串始终为3个字符长,例如:123、568、458等),并将该字符串与任意顺序的较长字符串(例如9841273)进行匹配。是否有可能检查这三个字符中至少有2个字符匹配(在此示例中)strMoves?请参见下面的代码以了解详细信息。
private readonly string[] strSolutions = new string[8] { "123", "159", "147", "258", "357", "369", "456", "789" };
Private Static string strMoves = "1823742"
foreach (string strResult in strSolutions)
{
Regex rgxMain = new Regex("[" + strMoves + "]{2}");
if (rgxMain.IsMatch(strResult))
{
MessageBox.Show(strResult);
}
}
我在正则表达式中指定的“{2}”部分,是期望结果至少匹配两个字符的位置,但我的逻辑有缺陷。只有当这两个字符按照字符串 strResult 中的顺序相邻时,才会返回 true。如果不是正确的顺序,则会返回 false。我将继续研究,但如果有任何人知道在 Microsoft 文档中需要查找什么内容,那将非常感谢!
正确的顺序会返回 true:"144257" 匹配到 "123" 不正确的顺序:"35718" 匹配到 "123" 3 在 1 前面,所以不匹配。
new Regex($@"([{strMoves}]).*(?!\1)[{strMoves}]")
- Wiktor Stribiżew(?!\1)
是一个负向前瞻,确保第二次出现的strMoves
模式不会与其第一次匹配的相同字符匹配。如果有效,请考虑接受下面的答案。此外,如果您仍需要澄清某些内容,请通过答案下方的评论告知。 - Wiktor Stribiżew