5

無効な文字がある場合に文字列を確認できる場合:

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

それは結構です。しかし、この文字列のすべての無効な文字を出力したいのですが? 例のようにSOMEString => 無効な文字は t、r、i、n、g です。何か案は?

4

3 に答える 3

6

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(); 
于 2012-09-12T08:36:09.067 に答える
2

あなたの例では、大文字でない場合は最後の文字を探しているため、正規表現は1文字で成功し、文字列にはそのような文字が含まれています。

正規表現を に変更する必要がありますRegex r = new Regex("[^A-Z]");

(@Chris のコメントに従って更新)

ただし、目的のためには、正規表現は実際に必要なものです-使用するだけですMatches.

例えば:

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

または、1行が必要な場合:

foreach (Match item in r.Matches(myString))
{
   str += item.ToString() + ", ";
}
Console.WriteLine(str + " are invalid");
于 2012-09-12T08:29:55.243 に答える
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

于 2012-09-12T08:30:08.763 に答える