繁体   English   中英

C# 检查正则表达式是否匹配,返回 True 而不是 False

[英]C# Check if Regex is a match, returns True instead of False

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

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

  • 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' 的替代品(两者都是 Stringbuilders)。

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

还是我完全错了?

你必须把它写成

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

请参阅正则表达式演示 请注意. 匹配任何字符,包括换行符,因为RegexOptions.Singleline选项被传递给Regex构造函数。

当前[Y[\\s\\S]|E[BILPRSY]|I[BELN]]模式匹配 3 个选项:

  • [Y[\\s\\S] - 一个Y[ ,空格或非空格(这匹配任何字符!)
  • | - 或
  • E[BILPRSY] - E然后是班上的一封信
  • | - 或
  • I[BELN]] - a I跟着BELN ,然后是]

如您所见,您通过用[]包围整个模式来破坏它。

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

在此处输入图片说明

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

因为 \\s\\S 被识别为空白或非空白,所以几乎和所有东西一样,Garcon 是一个有效的匹配项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM