如何将字符串中的[city]替换为[City]

时间:2019-12-04 16:55:53

标签: c# regex replace

我想用[city], [cIty], [ciTY], ...替换[City]
我认为正则表达式是一个很好的解决方案,但我并不擅长正则表达式。

尝试代码:

var text = "[City] [CIty] [ciTY] [city] [CITy]";

if (text.Contains("[city]"))
{
    //text = text.Replace("[city]", "[City]");
    text = Regex.Replace(text, @"[city]", "[City]");
    textbox.Text = text;

    textbox.SelectionStart = textbox.Text.Length;
    textbox.SelectionLength = 0;
}

除输出

  

[城市] [城市] [城市] [城市] [城市]

那是行不通的,因为regex语法没有完成

3 个答案:

答案 0 :(得分:3)

三点:

  1. 要匹配文本中的括号[],您需要在正则表达式中将其转义:@"\[city\]"

  2. Regex.Replace

  3. 中添加忽略大小写RegexOptions.IgnoreCase的选项
  4. 对于“包含”,它不使用正则表达式。请改用Regex.IsMatch

所以这会将您的代码变成这样的问题:

var text = textbox.Text;
var pattern = @"\[City\]";

// Will match [city], [cITy], [CITY], but not exactly [City] 
if (Regex.IsMatch(text, pattern, RegexOptions.IgnoreCase) && !Regex.IsMatch(text, pattern))
{
    text = Regex.Replace(text, pattern, "[City]", RegexOptions.IgnoreCase);

    // same code after that 
}

答案 1 :(得分:2)

您需要转括号,使用Regex.IsMatch而不是Contains,并增加模式的大小写。您可以使用正则表达式模式执行此操作,但是C#已构建RegexOptions,因此您可以IgnoreCase。可能是这样的:

if(Regex.IsMatch(text, @"\[city\]", RegexOptions.IgnoreCase))
{
    text = Regex.Replace(text, @"\[city\]", "[City]", RegexOptions.IgnoreCase);
}

答案 2 :(得分:2)

这里是dotnetfiddle

您需要转义正则表达式中的特殊字符,例如方括号,您可以在下面的模式字符串中看到这些特殊字符。然后,您需要添加正则表达式选项RegexOptions.IgnoreCase以在将字符串与模式字符串进行比较时忽略大小写。

        var testText = @"[CIty] [ciTY] [city] [CITy] [City]";
        Console.WriteLine("Original text: " + testText);

        var pattern = @"\[City\]";

        if(Regex.IsMatch(testText, pattern, RegexOptions.IgnoreCase))
        {
            //use the below updated value as you wish
            var updatedStringVal = Regex.Replace(testText, pattern, "[City]", RegexOptions.IgnoreCase);
            Console.WriteLine("Updated text: " + updatedStringVal);
        }