-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&!” 它会删除两个!和 &。所以我设置了一个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)位匹配但不存储范围 !-% 中的单个字符,该字符正好位于回车符之前。

我还建议使用这个方便的 reg ex 表达式备忘单:

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

于 2012-04-30T14:15:51.067 回答