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

C# 字符串正则表达式帮助C,c#,regex,C#,Regex,我正在尝试创建一个读取字符串的正则表达式,如果最后一个字符类似于!$etc,它忽略最后一个字符,读取字符串以允许我的代码在字典类中查找它,然后输出字符串,并忽略末尾的字符。这真的可能吗,还是我必须删除最后一个字符 到目前为止 foreach(var line in yourReader) { var dict = new Dictionary<string,string>(); // your replacement dictionaries foreach(var

我正在尝试创建一个读取字符串的正则表达式,如果最后一个字符类似于!$etc,它忽略最后一个字符,读取字符串以允许我的代码在字典类中查找它,然后输出字符串,并忽略末尾的字符。这真的可能吗,还是我必须删除最后一个字符

到目前为止

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");
    }
}

但是我真的不知道它是干什么的

看看。像[!£$%]$这样的正则表达式应该满足您的需要。

在您的情况下,我建议对一系列字符使用正则表达式来删除!英镑,美元等

在您的案例中,您希望使用以下方式:

"<the bit you want to capture>(?:[!-%]\\r)"
?:[!-%]\\r位匹配但不存储范围内的单个字符!-%它正好位于回车符之前

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


我没有发现使用正则表达式有任何意义,因此我希望这将有助于:

        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;
            }
        }
编辑:


我检查了旧代码,它出现了一个问题:当字符串的最后一个禁止字符按禁止字符数组的顺序排列时,它删除了所有字符。如果你的字符串是Hello World&!它将删除这两个选项!及&。所以我设定了一个休息;这将不再是一个问题。

请编辑您的问题以添加详细信息。不要在评论中提及这一点。我建议使用这个方便的注册表表达式备忘单:完美!谢谢你把我推向正确的方向。我需要在变量中添加任何禁止字符,我可以在最后再添加一次,但是我现在知道怎么做了,所以谢谢@乔丹莫法特,我的荣幸。我必须修正我的答案,所以请检查编辑。它所需要的只是增加一次休息;一旦if发生。
        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;
            }
        }