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