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.

任何帮助表示赞赏

4

3 回答 3

5

尝试

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

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

于 2013-04-03T14:05:51.437 回答
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.

这个怎么运作?按符号拆分原始字符串",",丢弃空字符串,从每个字符串的开头/结尾修剪所有空格,使用 same 连接非空字符串","

IMO,比支持更容易RegEx

于 2013-04-03T14:11:38.153 回答
0

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

于 2013-04-03T14:05:16.110 回答