C#检查Regex是否匹配,返回True而不是False

时间:2017-10-19 12:20:35

标签: c# .net regex substring

我不熟悉正则表达式,所以我希望有人可以帮助我。我正在使用正则表达式,如果特定的正则表达式匹配与否,我将在代码中进一步检查。

正则表达式我使用并想要检查:

  • Regex InitialGForKj = new Regex("[Y[\s\S]|E[BILPRSY]|I[BELN]]", RegexOptions.Compiled);

现在我检查它是否匹配的代码如下:

else if (i == 0 && InitialGForKj.IsMatch(upperLetters.Substring(1, 3)))
        {
            dmetaphoneKeyResultPrimary.Append("K");
            dmetaphoneKeyResultSecondary.Append("J");
            i += 2;
        }
  • i是当前角色(在这种情况下是'G')。
  • upperLetters =将要检查的词(在这种情况下:Garçon)。
  • dmetaphoneKeyResultPrimarydmetaphoneKeyResultSecondary是字母'G'的替代品(两者都是字符串制作者)。

我还用Console.WriteLine()检查了它的值是什么子串(Wich返回“arç”)。 那么,现在的问题是,为什么代码将其视为true而不是False?我认为它必须是False

或者我完全错了吗?

需要更多信息,请问我会添加它。

2 个答案:

答案 0 :(得分:3)

您必须将其写为

var InitialGForKj = new Regex("Y.|E[BILPRSY]|I[BELN]", RegexOptions.Compiled | RegexOptions.Singleline);

请参阅regex demo。请注意,.匹配任何包含换行符的char,因为RegexOptions.Singleline选项已传递给 Regex 构造函数。

当前[Y[\s\S]|E[BILPRSY]|I[BELN]]模式匹配3个替代方案:

  • [Y[\s\S] - Y[,空白或非空白(这匹配任何字符!)
  • | - 或
  • E[BILPRSY] - E,然后来自班级的一封信
  • | - 或
  • I[BELN]] - I后跟BELN,然后是]。< / LI>

如您所见,您通过使用[]封闭整个模式来破坏它。

答案 1 :(得分:0)

首先,这是你当前的表达方式:

enter image description here

如您所见,外部[]将被识别为字符。放弃它们!

因为\ s \ S被识别为空格或非空格,所以就像所有内容一样,Garcon是一个有效的匹配。