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

正则表达式替换字符串

  •  0
  • ManniAT  · 技术社区  · 15 年前

    我试着替换   使用.NET正则表达式的字符串中的元素-没有运气:)

    假设以下字符串:

     AA A  C D   A Some Text   here

    规则

    1. 请勿在生产线开始时更换
    2. 仅替换单个引用
    3. 如果空间在其前面或后面,则不要替换(可选)

    上面的预期结果是(#作为替换字符):

     AA#A  C#D   A#Some Text   here

    5 回复  |  直到 15 年前
        1
  •  2
  •   Ahmad Mageed    15 年前

    这应该涵盖您的所有3项要求。请原谅格式错误;我不得不在最后几行打勾   正确地出现。

    string pattern = @"(?<!^|&nbsp;)((?<!\s)&nbsp;(?!\s))(?!\1)";

    string[] inputs = { "&nbsp;AA&nbsp;A&nbsp;&nbsp;C&nbsp;D&nbsp;&nbsp; A&nbsp;Some Text &nbsp; here", // original

    "&nbsp;AA&nbsp;A&nbsp;&nbsp;C&nbsp;D&nbsp;&nbsp; A &nbsp;Some Text &nbsp; here" // space before/after

    };

    foreach (string input in inputs)
    {
        string result = Regex.Replace(input, pattern, "#");
        Console.WriteLine("Original: {0}\nResult: {1}", input, result);
    }
    

    输出:

    Original: &nbsp;AA&nbsp;A&nbsp;&nbsp;C&nbsp;D&nbsp;&nbsp; A&nbsp;Some Text &nbsp; here

    Result: &nbsp;AA#A&nbsp;&nbsp;C#D&nbsp;&nbsp; A#Some Text &nbsp; here

    Original: &nbsp;AA&nbsp;A&nbsp;&nbsp;C&nbsp;D&nbsp;&nbsp; A &nbsp;Some Text &nbsp; here

    Result: &nbsp;AA#A&nbsp;&nbsp;C#D&nbsp;&nbsp; A &nbsp;Some Text &nbsp; here

        2
  •  1
  •   beggs    15 年前

    s/(?<!\A| |&nbsp;)&nbsp;(?!&nbsp;| )/#/g

    这依赖于负向后看、负向前看和\A=输入转义序列的开始。

        3
  •  1
  •   radu florescu    12 年前

    您应该尝试以下示例:

    string s = Regex.Replace(original, "(?<!(&nbsp;| |^))&nbsp;(?!(&nbsp;| ))", "#");

        5
  •  0
  •   Cem Kalyoncu    15 年前

    [^^\s(nbsp;)](nbsp;)[^$\s(nbsp;)]