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

本文关键字:正则表达式 字符 | 更新日期: 2023-09-27 18:09:33

我需要做一个正则表达式,将匹配字符"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"的单词。

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

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

如果你只是想找到一个精确匹配的字符串"N",那么就没有必要使用正则表达式!

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

当只有一个字符时,您并不真正需要字符类([])。^N$的含义与^[N]$相同。

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

^匹配字符串的开头,$匹配字符串的结尾,两者之间唯一有效的字符是N,因此它将匹配字符串N


更新:

如果你所追求的是一个由N组成的字符串,那么你根本不需要regex,正如其他人所建议的,使用if (word == "N"),或者如果你想从一个更大的字符串中得到任何由N组成的单词,那么你会使用'bN'b