【问题标题】:How do you do case-insensitive string replacement using regular expressions?如何使用正则表达式进行不区分大小写的字符串替换?
【发布时间】:2009-07-16 18:32:21
【问题描述】:

我对正则表达式了如指掌,并认为这是学习至少最基本的基础知识的好机会。

如何在 C# 中使用正则表达式进行这种不区分大小写的字符串替换?

myString.Replace("/kg", "").Replace("/KG", "");

(请注意,'/' 是文字。)

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    你可以使用:

    myString = Regex.Replace(myString, "/kg", "", RegexOptions.IgnoreCase);
    

    如果你要多次这样做,你可以这样做:

    // You can reuse this object
    Regex regex = new Regex("/kg", RegexOptions.IgnoreCase);
    myString = regex.Replace(myString, "");
    

    使用(?i:/kg) 将使较大的正则表达式的那一点不区分大小写 - 我个人更喜欢使用RegexOptions 使选项影响整个模式。

    MSDN 有 pretty reasonable documentation 的 .NET 正则表达式。

    【讨论】:

    • 你漏掉了冒号:(?i:/kg)
    【解决方案2】:

    像这样:

    myString = Regex.Replace(myString, "/[Kk][Gg]", String.Empty);
    

    请注意,它还将处理 /kG 和 /Kg 的组合,因此它比您的字符串替换示例做得更多。

    如果您只想处理 /kg 和 /KG 的特定组合:

    myString = Regex.Replace(myString, "/(?:kg|KG)", String.Empty);
    

    【讨论】:

    • 为什么投反对票?如果你不解释你认为错误的地方,它就无法改进答案。
    【解决方案3】:

    "/[kK][gG]" 或 "(?i:/kg)" 将为您匹配。

    声明一个新的正则表达式对象,将其中一个作为您的内容传递。然后运行 ​​regex.replace。

    【讨论】:

      【解决方案4】:

      这取决于您想要实现的目标。我假设您想删除斜线后的一系列字符?

      string replaced = Regex.Replace(input,"/[a-zA-Z]+","");
      

      string replaced = Regex.Replace(input,"/[a-z]+","",RegexOptions.IgnoreCase);
      

      【讨论】:

        【解决方案5】:
            Regex regex = new Regex(@"/kg", RegexOptions.IgnoreCase );
            regex.Replace(input, "");
        

        【讨论】:

        • 见下面 Jon Skeet,他先发帖
        • 只有正向斜线时不需要@。
        • 是的,我使用 nregex.com 创建示例的第一行。无论模式如何,他们都使用@
        • 如果你总是在正则表达式前面加上@,你永远不必考虑给定的表达式是否需要它。
        【解决方案6】:

        Here 是使用 Regex.replace 函数的示例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-29
          • 1970-01-01
          • 2013-08-05
          • 2013-03-14
          • 1970-01-01
          • 1970-01-01
          • 2021-05-01
          相关资源
          最近更新 更多