【问题标题】:Why is the regex replace method not working?为什么正则表达式替换方法不起作用?
【发布时间】:2009-01-06 17:27:09
【问题描述】:

在下面的代码中,我想用"united states of America" 替换每个出现的"U.S.A",用"united kingdom" 替换每个出现的"uk",但它似乎不起作用。我如何解决它?

class Program
    {
        static void Main(string[] args)
        {
            string s = "the U.S.A love UK";
            Console.WriteLine(replace(s));
        }

        public static string replace(string s)
        {
            s = Regex.Replace(s, @"^U.S.A", " United state Of America");
            s = Regex.Replace(s, @"^Uk", "United kingdom");
            return s;
        }

    }

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    好吧,看看你的正则表达式中的搜索模式。

    ^ 具有特定含义。 (. 也是如此,但在这种情况下它们实际上不会失败,但它们并没有按照您的想法做)

    【讨论】:

      【解决方案2】:

      对于简单的替换,你不需要正则表达式:

      string s = "the U.S.A love UK";
      s = s.Replace("U.S.A", "United States of America").Replace("UK", "United Kingdom");
      

      【讨论】:

      • 呵呵:这是我对大多数正则表达式问题的标准回答,但我看到了作业标签并认为这意味着使用正则表达式是作业的一部分。
      【解决方案3】:
      1. U.S.A 表达式中的 . 将匹配 any 单个字符。我怀疑这就是你的意图。
      2. ^ 将您的表达式固定到字符串的开头。你不想要它。
      3. 默认情况下,正则表达式区分大小写。如果您希望 UkUK 匹配,则需要指定不区分大小写的比较。

      【讨论】:

        【解决方案4】:

        扩展 anakata 的答案:

        在正则表达式中,'^' 字符的意思是“匹配字符串的开头”,所以如果你想要“U.S.A.”要被替换,它必须是字符串中的前六个字符,对于英国也是如此。从您的 RE 中删除“^”,它应该可以工作。

        关于“。”的评论。字符,在正则表达式中这意味着匹配 any 字符。如果您希望匹配文字 '.'你必须像这样“。”

        【讨论】:

        • 我有点故意不扩展,因为这是一个家庭作业问题;)
        • 这是一个公平的观点,当我最初看这个时,我错过了那个标签。
        【解决方案5】:

        上面已经有足够的正确答案了。所以我要补充一点,更好地理解正则表达式的一个很好的资源是Mastering Regular Expressions

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-13
          • 2014-06-01
          • 2017-05-13
          • 1970-01-01
          • 2023-03-23
          相关资源
          最近更新 更多