String.Replace ignoring case

前端 未结 17 758
野趣味
野趣味 2020-11-29 19:03

I have a string called \"hello world\"

I need to replace the word \"world\" to \"csharp\"

for this I use:

string.Replace(\"World\", \"csharp\         


        
17条回答
  •  抹茶落季
    2020-11-29 19:50

    var search = "world";
    var replacement = "csharp";
    string result = Regex.Replace(
        stringToLookInto,
        Regex.Escape(search), 
        replacement.Replace("$","$$"), 
        RegexOptions.IgnoreCase
    );
    

    The Regex.Escape is useful if you rely on user input which can contains Regex language elements

    Update

    Thanks to comments, you actually don't have to escape the replacement string.

    Here is a small fiddle that tests the code:

    using System;
    using System.Text.RegularExpressions;           
    public class Program
    {
        public static void Main()
        {
    
            var tests = new[] {
                new { Input="abcdef", Search="abc", Replacement="xyz", Expected="xyzdef" },
                new { Input="ABCdef", Search="abc", Replacement="xyz", Expected="xyzdef" },
                new { Input="A*BCdef", Search="a*bc", Replacement="xyz", Expected="xyzdef" },
                new { Input="abcdef", Search="abc", Replacement="x*yz", Expected="x*yzdef" },       
                new { Input="abcdef", Search="abc", Replacement="$", Expected="$def" },
            };
    
    
            foreach(var test in tests){
                var result = ReplaceCaseInsensitive(test.Input, test.Search, test.Replacement);
    
                Console.WriteLine(
                    "Success: {0}, Actual: {1}, {2}",
                    result == test.Expected,
                    result,
                    test
                );
    
            }
    
    
        }
    
        private static string ReplaceCaseInsensitive(string input, string search, string replacement){
            string result = Regex.Replace(
                input,
                Regex.Escape(search), 
                replacement.Replace("$","$$"), 
                RegexOptions.IgnoreCase
            );
            return result;
        }
    }
    

    Its output is:

    Success: True, Actual: xyzdef, { Input = abcdef, Search = abc, Replacement = xyz, Expected = xyzdef } 
    Success: True, Actual: xyzdef, { Input = ABCdef, Search = abc, Replacement = xyz, Expected = xyzdef }
    Success: True, Actual: xyzdef, { Input = A*BCdef, Search = a*bc, Replacement = xyz, Expected = xyzdef } 
    Success: True, Actual: x*yzdef, { Input = abcdef, Search = abc, Replacement = x*yz, Expected = x*yzdef} 
    Success: True, Actual: $def, { Input = abcdef, Search = abc, Replacement = $, Expected = $def }
    

提交回复
热议问题