匹配特定字符的正则表达式
本文关键字:正则表达式 字符 | 更新日期: 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
。