c#正则表达式替换为插入

时间:2015-10-28 15:37:51

标签: c# regex

我需要包围所有'&'用' |'在一个字符串中但只有在没有' |'那里 例如。以下字符串( - >预期结果):

  1. " ME&安培;您" - > "我|&放大器; | YOU"
  2. "我|&安培;您" - >不要改变
  3. " ME&安培; |您" - >不要改变
  4. " Me&你" - > "我|& |你"
  5. 我想出了选择器(至少我认为),它将捕获示例1和4

    [^|]&[^|]
    

    但现在我坚持创建替换模式。 我知道我需要在'&'之前和之后复制零件。但是不能让它发挥作用。最接近的结果是

    |&|
    

    但这也删除了'&'

    之前和之后的字符

    注意:我无法使用

    s.Replace("&", "|&|").Replace("||&", "|&").Replace("&||", "&|"); 
    

    因为字符串已经包含" ||&"在开始时,无论如何都不会产生预期的结果。

    欢迎使用正则表达式的任何替代方案!

3 个答案:

答案 0 :(得分:4)

你需要使用负向前瞻和后视:

(?<!\|)&(?!\|)

答案 1 :(得分:3)

这应该适用于您的示例:

static void Main(string[] args)
{
    List<string> tests = new List<string>();

    tests.Add("Me&You");
    tests.Add("Me|&You");
    tests.Add("Me&|You");
    tests.Add("Me & You");

    foreach (var item in tests)
    {
        Console.WriteLine("{0}: {1}", item,
                          Regex.Replace(item, @"(?<!\|)&(?!\|)", "|&|"));
    }

    Console.ReadKey();

}

答案 2 :(得分:1)

搜索\|?&\|?并替换为|&|的正则表达式将是一种简单的方法。这适用于行的开头和结尾以及行内部。

该表达式在|之前和之后查找零个或一个&个字符,并替换所有四个变体(即&|&|&|&|)以及所需的文字。该表达式不会在现有|字符正确时单独保留。