有没有替代字符串。替换是大小写

我需要搜索一个字符串,并用从数据库中提取的值替换所有出现的%FirstName%%PolicyAmount% 。 问题是FirstName的大写字母各不相同。 这阻止我使用String.Replace()方法。 我已经看到关于这个主题的网页

Regex.Replace(strInput, strToken, strReplaceWith, RegexOptions.IgnoreCase);

但是,由于某种原因,当我尝试用$0替换%PolicyAmount%时,替换从不会发生。 我认为这与美元符号是正则表达式中的保留字符有关。

有没有另外一种方法可以使用,它不涉及清理输入来处理正则表达式特殊字符?


来自MSDN
$ 0 - “替换组号码(十进制)匹配的最后一个子字符串。”

在.NET正则表达式组0始终是整个匹配。 对于文字$你需要

string value = Regex.Replace("%PolicyAmount%", "%PolicyAmount%", @"$$0", RegexOptions.IgnoreCase);

看起来像string.Replace应该有一个接受StringComparison参数的重载。 既然没有,你可以尝试这样的事情:

public static string ReplaceString(string str, string oldValue, string newValue, StringComparison comparison)
{
    StringBuilder sb = new StringBuilder();

    int previousIndex = 0;
    int index = str.IndexOf(oldValue, comparison);
    while (index != -1)
    {
        sb.Append(str.Substring(previousIndex, index - previousIndex));
        sb.Append(newValue);
        index += oldValue.Length;

        previousIndex = index;
        index = str.IndexOf(oldValue, index, comparison);
    }
    sb.Append(str.Substring(previousIndex));

    return sb.ToString();
}

这是一个扩展方法。 不知道我在哪里找到它。

public static class StringExtensions
{
    public static string Replace(this string originalString, string oldValue, string newValue, StringComparison comparisonType)
    {
        int startIndex = 0;
        while (true)
        {
            startIndex = originalString.IndexOf(oldValue, startIndex, comparisonType);
            if (startIndex == -1)
                break;

            originalString = originalString.Substring(0, startIndex) + newValue + originalString.Substring(startIndex + oldValue.Length);

            startIndex += newValue.Length;
        }

        return originalString;
    }

}
链接地址: http://www.djcxy.com/p/21023.html

上一篇: Is there an alternative to string.Replace that is case

下一篇: What is the difference between String and string in C#?