正则表达式匹配特定字符?

时间:2013-04-16 14:52:55

标签: c# .net regex

我需要创建一个正则表达式,它与单独的字符“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"的任何单词匹配。

3 个答案:

答案 0 :(得分:3)

您可以使用\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);
            }
        }
    }
}

答案 1 :(得分:2)

当只有一个字符[表示与]相同时,您真的不需要字符类^N$^[N]$)。

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

^匹配字符串的开头,$结尾,其中唯一有效的字符为N,因此匹配字符串N


更新

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

答案 2 :(得分:2)

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

if ( word == "N" ) ...