-3

文字列を読み取る正規表現を作成しようとしていますが、最後の文字が !"£$% などの場合、最後の文字を無視して文字列を読み取ります (コードが辞書クラスで検索できるようにするため) ) そして、最後の文字を無視して文字列を出力します.これは実際に可能ですか、それとも最後の文字を削除する必要がありますか?

ここのところ...

foreach(var line in yourReader)
{
    var dict = new Dictionary<string,string>(); // your replacement dictionaries
    foreach(var kvp in dict)
    {
        System.Text.RegularExpressions.Regex.Replace(line,"(\s|,|\.|:|\\t)" + kvp.Key + "(\s|,|\.|:|\\t)","\0" + kvp.Value + "\1");
    }
}

これも試してみようと言われました

var trans = textbox1.Text;

foreach (var kvp in d) //d is my dictionary so use yours
{
     trans = trans.Replace(kvp.Key, kvp.Value);
}

textbox2.Text = trans;

しかし、文字通りそれが何をするのかわかりません

4

3 に答える 3

2

正規表現を使用する意味が見つからなかったので、これが役立つことを願っています:

        const int ARRAY_OFFSET = 1;

        List<char> ForbiddenChars = new List<char>()
        {
            '!', '@', '#', '$', '%', '^', '&', '*', '£' //Add more if you'd like
        };

        string myString = "Hello World!&";

        foreach (var forbiddenChar in ForbiddenChars)
        {
            if (myString[myString.Length - ARRAY_OFFSET] == forbiddenChar)
            {
                myString = myString.Remove(myString.Length - ARRAY_OFFSET);
                break;
            }
        }

編集:

古いコードを確認したところ、問題がありました。文字列の最後の「禁止」文字がForbiddenChars配列の順序になっていると、それらすべてが削除されました。文字列が「Hello World&!」の場合 両方を削除します!と &。だから私はaを設定しbreak;、それはもう問題になりません。

于 2012-04-30T14:33:19.623 に答える
1

Regex.Replaceを見てください。のような正規表現は、[!"£$%]$必要なことを行う必要があります。

于 2012-04-30T13:39:14.473 に答える
0

あなたの場合、文字の範囲に正規表現を使用して !"£$% などを削除することをお勧めします。

あなたのケースでこれを使用したい方法は、次のようになります。

"<the bit you want to capture>(?:[!-%]\\r)"

この(?:[!-%]\\r)ビットは、改行文字の直前にある !-% の範囲内の 1 文字に一致しますが、保存はしません。

また、次の正規表現の便利なチート シートを使用することをお勧めします。

http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet

于 2012-04-30T14:15:51.067 に答える