使用正则表达式查找字符串中不匹配的字符?

时间:2012-09-12 08:22:07

标签: c# .net regex

如果我能检查字符串是否有无效字符:

Regex r = new Regex("[^A-Z]$");
string myString = "SOMEString"; 
if (r.IsMatch(myString)) 
{     
  Console.WriteLine("invalid string!");
} 

很好。但是我想打印出这个字符串中的每个无效字符?如示例 SOMEString =>无效的字符是t,r,i,n,g。有什么想法吗?

3 个答案:

答案 0 :(得分:5)

使用LINQ。下面将给出一个包含5个元素的数组,与正则表达式不匹配。

char[] myCharacterArray = myString.Where(c => r.IsMatch(c.ToString())).ToArray();
foreach (char c in myCharacterArray)
{
    Console.WriteLine(c);
}

输出将是:

t
r
i
n
g

编辑:

看起来,您希望将所有小写字符视为无效字符串。你可以尝试:

   char[] myCharacterArray2 = myString
                                   .Where(c => ((int)c) >= 97 && ((int)c) <= 122)
                                   .ToArray(); 

答案 1 :(得分:2)

在你的例子中,正则表达式会在一个字符上成功,因为它正在查找最后一个字符(如果它不是大写字母),并且你的字符串有这样的字符。

正则表达式应更改为Regex r = new Regex("[^A-Z]");

(更新后@ Chris的评论)

但是,出于您的目的,正则表达式实际上就是您想要的 - 只需使用Matches

e.g:

foreach (Match item in r.Matches(myString))
{
   Console.WriteLine(item.ToString() + " is invalid");
}

或者,如果你想要一行:

foreach (Match item in r.Matches(myString))
{
   str += item.ToString() + ", ";
}
Console.WriteLine(str + " are invalid");

答案 2 :(得分:0)

试试这个:

char[] list = new char[5];
Regex r = new Regex("[^A-Z]*$");
string myString = "SOMEString";

foreach (Match match in r.Matches(myString))
{
    list = match.Value.ToCharArray();
    break;
}

string str = "invalid chars are ";
foreach (char ch in list)
{
    str += ch + ", ";
}

Console.Write(str);

输出:invalid chars are t, r, i, n, g