代码之家  ›  专栏  ›  技术社区  ›  Ben

为什么正则表达式替换方法不起作用?

  •  1
  • Ben  · 技术社区  · 17 年前

    在下面的代码中,我想替换每次出现的 "U.S.A" 具有 "united states of America" 每一次发生 "uk" 具有 "united kingdom" 在字符串中,但它似乎不起作用。我该如何修复它?

    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;
            }
    
        }
    
    5 回复  |  直到 13 年前
        1
  •  3
  •   annakata    17 年前

    那么,看看正则表达式中的搜索模式。

    这个 ^ 具有特定的含义。(正如 . 但在这种情况下,他们实际上不会失败,但他们并没有做你认为的事情)

        2
  •  1
  •   Christian C. Salvadó    17 年前

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

    string s = "the U.S.A love UK";
    s = s.Replace("U.S.A", "United States of America").Replace("UK", "United Kingdom");
    
        3
  •  1
  •   Joel Coehoorn    17 年前
    1. 这个 . 在你的 U.S.A 表达式将匹配 任何 单一字符。我怀疑你不是这个意思。
    2. 这个 ^ 将表达式固定在字符串的开头。你不想要它。
    3. 默认情况下,正则表达式区分大小写。如果你想要我 Uk 匹配 UK 您需要指定一个不区分大小写的比较。
        4
  •  1
  •   foxxtrot    17 年前

    进一步阐述annakata的回答:

    在正则表达式中,“^”字符的意思是“字符串开头匹配”,因此如果您希望替换“U.S.A.”,它必须是字符串中的前六个字符,与英国相同。从RE中删除“^”,它应该有效。

    关于“”的评论。'字符,在正则表达式中,这意味着匹配 任何 性格。如果你想匹配一个字面意思。“你必须这样逃避”

        5
  •  0
  •   Gavin Miller    17 年前

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