如果我能够检查一个字符串是否有无效字符:
Regex r = new Regex("[^A-Z]$");
string myString = "SOMEString";
if (r.IsMatch(myString))
{
Console.WriteLine("invalid string!");
}
没事。但是我想打印出这个字符串中的每个无效字符?就像在示例中SOMEString => 无效字符是 t,r,i,n,g 一样。有任何想法吗?
使用 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();
在您的示例中,正则表达式会在一个字符上成功,因为如果它不是大写,它会查找最后一个字符,并且您的字符串具有这样的字符。
正则表达式应更改为Regex r = new Regex("[^A-Z]");
.
(根据@Chris 的评论更新)
但是,出于您的目的,正则表达式实际上是您想要的 - 只需使用Matches
.
例如:
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");
试试这个:
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