-4

認識されない文字を含む文字列を文字列コレクションから削除しようとしています。これを達成するための最良の方法は何ですか?

4

5 に答える 5

1

認識できない文字を含む文字列を削除するには: (例: 小文字を受け入れたい場合は、"foo@bar" は拒否されます)

  1. 「認識された」文字のセットを定義し、^ で始まり $ で終わる正規表現を作成します。たとえば、「認識された」文字が大文字の A から Z の場合、次のようになります。^[A-Z]$
  2. 一致しない文字列を拒否する

注:これは改行を含む文字列では機能しませんが、それをサポートする必要がある場合は微調整できます

認識できない文字を完全に含む文字列を削除するには: (例: 小文字を受け入れたい場合は、少なくとも 1 つの小文字が含まれているため、"foo@bar" が受け入れられます)

  1. 「認識された」文字のセットを定義する正規表現を作成しますが^、角括弧内に文字があり、^ で始まり $ で終わります。たとえば、「認識された」文字が大文字の A から Z の場合、次のようになります。^[^A-Z]$
  2. 一致する文字列を拒否する
于 2012-10-24T20:13:48.443 に答える
1

配列 ( と仮定string[]) はアイテムを削除するときにサイズ変更されないため、とにかく新しいものを作成する必要があります。したがって、基本的な LINQ フィルタリングを使用ToArray()すると、新しい配列が得られます。

myArray = myArray.Where(s => !ContainsSpecialCharacters(s)).ToArray();
于 2012-10-24T20:12:04.683 に答える
0

Linq のwhereメソッドと、探している文字を含む正規表現を調べます。擬似コード:

return myStringCollection.Where(!s matches regex)
于 2012-10-24T20:16:46.923 に答える
0

これはあなたが望むように見えます。

List<string> strings = new List<string>()
{
    "one",
    "two`",
    "thr^ee",
    "four"
};

List<char> invalid_chars = new List<char>()
{
    '`', '-', '^'
};

strings.RemoveAll(s => s.Any(c => invalid_chars.Contains(c)));
strings.ForEach(s => Console.WriteLine(s));

出力を生成します:

one
four
于 2012-10-24T20:17:12.430 に答える
0

この質問には、あなたが探していると私が思うものと似たような答えがいくつかあります。ただし、すべての文字、数字、空白、句読点を含めたいと思いますが、それ以外はすべて除外します。それは正確ですか?もしそうなら、これはあなたのためにそれをするはずです:

char[] arr = str.ToCharArray();

arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c) || 
                      char.IsWhiteSpace(c) || char.IsPunctuation(c))));
str = new string(arr);
于 2012-10-24T20:48:43.933 に答える