2013-04-03 267 views
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. 

任何幫助理解

回答

5

嘗試

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

基本上,與單個逗號,其中至少一個逗號存在替換任何數目的逗號和空格的。

0

在原來的字符串存在(在兩個逗號之間的空間「,,」),但正則表示,+,這意味着一個或多個連續的逗號。這是否工作:(\s*(,\s+)+\s*)

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更容易支持