1

我需要制作一个正则表达式,当它单独时将匹配字符“N”。到目前为止,我已经想出了这个表达式:"^[N]$"这似乎在这个例子中有效。它与其他三个不匹配,只是“N”。

public static void Main()
{
    string[] words = new string[] { "42ND", "N", "WATERING", "ANONYMOUS"};

    string pattern = @"^[N]$";

    foreach (string word in words)
    {
        if( Regex.IsMatch(word, pattern))
        {
            Console.WriteLine(word + " Is a match"); 
        }
    }
} 

任何人都可以找出任何问题或提供更好的问题吗?谢谢!

编辑清楚一点:我只是想匹配这封信"N",仅此而已。它不应与“NN”、“NNN”或任何变体匹配,也不应与包含字母的任何单词匹配"N"

4

3 回答 3

4

您可以使用\b(单词边界匹配),这样您就可以挑选出字符串中的所有“单 N”单词(不确定这是否是您真正需要的,但示例中的字符串数组表明可能是这种情况)。

using System;
using System.Diagnostics;
using System.Text.RegularExpressions;

namespace ConsoleApplication1 {
    internal class Program {
        private static void Main(string[] args) {
            var pattern = new Regex(@"\bN\b");
            const string input = "N foo N bar N";
            MatchCollection matches = pattern.Matches(input);
            Debug.Assert(matches.Count == 3);
            foreach (Match m in matches) {
                Console.WriteLine(m.Value);
            }
        }
    }
}
于 2013-04-16T14:59:54.623 回答
2

当只有一个字符[与.]^N$^[N]$

您的正则表达式匹配的是一个由单个字符组成的字符串:N.

^匹配字符串的开头和$结尾之间唯一有效的字符是N,所以它只会匹配字符串N


更新:

如果您所追求的只是一个由 组成的字符串N,那么您根本不需要正则表达式,正如其他人所建议的那样,使用if (word == "N")或者如果您想N从更大的字符串中获取任何单词,那么您将使用\bN\b.

于 2013-04-16T14:57:22.297 回答
2

如果您只是想找到与字符串完全匹配的内容,"N"则无需使用正则表达式!

if ( word == "N" ) ...
于 2013-04-16T15:00:41.517 回答