RegEx替换字符串

时间:2013-04-03 13:59:36

标签: c# regex

我正在尝试将字符串规范化,然后再进行解析。基本上删除逗号之前或之后的任何空格,如果两个或多个逗号只用空格分隔,则用一个逗号替换。

var r = new Regex(@"(\s*,+\s*)");
var query = r.Replace("my reg, is a   disaster    everytime , i,try ,it,       yep, ,disaster.", ",");

输出应为:

my reg,is a   disaster    everytime,i,try,it,yep,disaster.

但是:

my reg,is a   disaster    everytime,i,try,it,yep,,disaster.

感谢任何帮助

3 个答案:

答案 0 :(得分:5)

尝试

var r = new Regex(@"(\s|,)*,(\s|,)*");

基本上,用一个逗号替换任意数量的逗号和空格,其中至少存在一个逗号。

答案 1 :(得分:2)

non-Regex解决方案:

var dirty = "my reg, is a   disaster    everytime , i,try ,it,       yep, ,disaster.";
var clean = string.Join(",",
                           dirty.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries)
                                .Select(x => x.Trim())
                                .Where(x => x.Length > 0));

输出:

my reg,is a   disaster    everytime,i,try,it,yep,disaster.

它是如何工作的?用","符号拆分原始字符串,丢弃空字符串,从每个字符串的开头/结尾修剪所有空格,使用相同的","连接非空字符串。

IMO比RegEx

更容易支持

答案 2 :(得分:0)

在原始字符串中,两个逗号之间有一个空格(“,,”),但正则表达式表示,+,表示一个或多个连续的逗号。这是否有效:(\s*(,\s+)+\s*)