2

ac# アプリケーションでは、不要な文字をすべて "Ã" に置き換える必要があります。以下は、許容される文字配列です。

string[] wantedCharacters = new string[] { " ", "!", "\"", "#", "$", "%", "&", "\'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~" };

これ以外のすべての文字は、「Ã」に置き換える必要があります。すべての文字列文字を Loopin で実行しました。しかし、実行に時間がかかりすぎます。これを行うための正規表現を探しています。どんな助けでも大歓迎です。

4

3 に答える 3

4

私はRegExを使用しません。読みにくくなります。

string input "..";
HashSet<char> wantedCharactersSet = new HashSet<char>(wantedCharacters);
for (int i = 0; i < input.Length; i++)
{
    if (!wantedCharactersSet.Contains(input[i]))
        input[i] = placeholderChar;
}

HashSet<T>.Contains()パフォーマンスが O(1) であるのに対し、Array は n だけであることに注意してください。

于 2013-02-22T06:38:01.680 に答える
4

文字を ASCII で印刷可能な文字 (コード 0x20 から 0x7E の文字) に制限しようとしているようです。したがって、次の正規表現を使用できます。

[^\x20-\x7E]

正規表現は、すべての不要な文字に一致します。

上記の正規表現をリテラル文字列に入れる:

@"[^\x20-\x7E]"

この正規表現をReplace関数で使用し、空の文字列に置き換えて不要な文字をすべて削除するか、選択したプレースホルダー文字に置き換えます。

于 2013-02-22T06:39:54.160 に答える
4

[^c]意味: ではないすべてcc許可された文字に置き換え、その正規表現を使用してメソッドを置き換える必要があります。

var reg = new Regex(@"[^ !""#$%&'()*+,-./0-9:;<=>?@A-Z\[\\\]^_`a-z{|}~]");
var result = reg.Replace(inputString, "Ã");
于 2013-02-22T06:40:44.797 に答える