用C#替换模式

时间:2013-12-05 19:58:44

标签: c# regex

考虑以下字符串:

##snapshot

string s = "a,,,b,c,,,,d";

###

我想获得以下结果:

"a,null,null,b,c,null,null,null,d";

换句话说,如果两个逗号之间没有任何内容,我想用“null”替换它。我尝试了以下方法:

using System.Text.RegularExpressions;     

### snapshot

Regex r = new Regex("[\\,\\,]");
Console.WriteLine(r.Replace(s, ",null,"));

我得到了:

enter image description here

我对正则表达式了解不多,这是我能想到的最好的结果,但结果是错误的......有人可以帮忙吗?谢谢!

9 个答案:

答案 0 :(得分:5)

使用积极向前看:

string s = "a,,,b,c,,,,d";
var replaced = Regex.Replace(s, ",(?=,)", ",null");
Console.WriteLine(replaced);

答案 1 :(得分:2)

此操作不需要正则表达式

string s = "a,,,b,c,,,,d";
var str = String.Join(",", s.Split(',')
                            .Select(x => String.IsNullOrEmpty(x) ? "null" : x));

答案 2 :(得分:2)

如果要像csv一样,但你需要填充空的col,你可以使用lookbehind和lookahead。

找到:(?<=^|,)(?=,|$)
替换"null"

或者,如果逗号之间有空格 找到:(?<=^|,)\s*(?=,|$)
替换"null"

答案 3 :(得分:1)

正则表达式中的[] operator表示“其中任何一个”。删除它们,您希望按字面意思与,,匹配。

或者只使用Replace,不需要正则表达式。

答案 4 :(得分:1)

/\,(?=\,)/g

使用它进行正面预测并使用c#代码替换它。用',null'

答案 5 :(得分:1)

也许比某些答案更直观 - 继续检查是否有东西可以替换直到完成。 (因为你使用每场比赛的“结果”):

  string s = "a,,,b,c,,,,d";

  while (Regex.Match(s,"(,,)").Success == true)
    s =  Regex.Replace(s,"(,,)",",null,");

答案 6 :(得分:0)

一种方法是这样的:

class Program
{
    static void Main(string[] args)
    {
        string s = "a,,,b,c,,,,d";
        Console.WriteLine(string.Join(",",
            s.Split(',')
            .Select(c => string.IsNullOrEmpty(c) ? "null" : c)));
    }
}

答案 7 :(得分:0)

如果您允许其他选项,您只需拆分并重新加入已处理的值,如下所示:

string s = "a,,,b,c,,,,d";
var cleaned = s.Split(',').Select(x => string.IsNullOrEmpty(x) ? "null" : x);
var result = string.Join(",", cleaned);

答案 8 :(得分:0)

using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System;

 public class Example
{
   public static void Main()
   {
        string str = @"a,,,b,c,,,,d";
        Regex pattern = new Regex(@",,");
        string replacement = @",null,";
        Match m = pattern.Match(str);
        while (m.Success)
        {
            str = pattern.Replace(str, replacement);
            m = pattern.Match(str);
        }

        Console.WriteLine(str);
    }
}