[英]Regex to match a specific character?
我需要制作一个正则表达式,使其单独使用时匹配字符“ 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$
表示与^[N]$
同时,实际上就不需要字符类( [
和]
)。
您的正则表达式匹配的是一个由单个字符N
组成的字符串。
^
匹配字符串的开头, $
匹配字符串的结尾,中间唯一的有效字符是N
,因此它将仅匹配字符串N
更新:
如果您所寻找的只是一个由N
组成的字符串,那么您根本不需要正则表达式,就像其他人建议的那样,请使用if (word == "N")
或如果您想获取由N
组成的任何单词较大的字符串,则可以使用\\bN\\b
。
如果您只是想查找与字符串"N"
的完全匹配,则无需使用正则表达式!
if ( word == "N" ) ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.