考虑以下字符串:
##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,"));
我得到了:
我对正则表达式了解不多,这是我能想到的最好的结果,但结果是错误的......有人可以帮忙吗?谢谢!
答案 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);
}
}