正则表达式替换字符串

3

在进行解析之前,我试图对字符串进行标准化。基本上是删除逗号前后的任何空格,并且如果两个或多个逗号仅用空格分隔,则替换为单个逗号。

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个回答

5

尝试

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

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


2

一种非正则表达式的解决方案:

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.

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

在我看来,比RegEx更易于支持。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接