字符串正则表达式帮助C#

时间:2012-04-30 13:35:40

标签: c# regex

我正在尝试创建一个读取字符串的正则表达式,如果最后一个字符类似于!“£$%等,它会忽略最后一个字符,读取字符串(以允许我的代码查找它)一个字典类)然后输出字符串,结尾处的字符被忽略。这实际上是可能的,还是我必须删除最后一个字符?

到目前为止......

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;

但实际上不知道它做了什么

3 个答案:

答案 0 :(得分: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&amp;!”它会删除两个!和&amp ;.所以我设置了一个break;,这将不再是一个问题。

答案 1 :(得分:1)

看看Regex.Replace。正则表达式(如[!"£$%]$)应该可以满足您的需求。

答案 2 :(得分:0)

在你的情况下,我建议使用正则表达式表示一系列字符来删除!“££%etc。

您希望在您的案例中使用此方法的方式如下:

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

(?:[!-%]\\r)位匹配但不存储范围内的单个字符! - %就在回车符之前。

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

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