簡體   English   中英

正則表達式、逗號和空格處理

[英]Regex, comma and space handling

我需要以下內容

  • 刪除多個空格(替換為 1)
  • 刪除多個逗號(替換為 1)
  • 修剪開頭和結尾的所有逗號和空格
  • 刪除逗號前面的所有空格
  • 逗號后總是有 1 個空格
  • 始終只有 1 個逗號和空格在一起

簡而言之,這只是一個基本的整潔的句子(關於逗號和空格)。

我目前的解決方案正在工作,但我想知道是否有辦法通過更智能的“正則表達式”表達式減少看似多余的步驟

當前解決方案

[TestCase(" , aaa,bbb ,, , ccc, ddd,,  eee   fff , , ggg , hhh ,", ExpectedResult = "aaa, bbb, ccc, ddd, eee fff, ggg, hhh")]
[TestCase(",, aaa,bbb ,, , ccc, ddd,,  eee   fff , , ggg , hhh ,, ", ExpectedResult = "aaa, bbb, ccc, ddd, eee fff, ggg, hhh")]
[TestCase(",,  ,,", ExpectedResult = "")]
public string CleanSentence(string source)
{
   var duplicateSpaces = new Regex(@"[ ]{2,}", RegexOptions.None);
   var spacesBeforeCommas = new Regex(@"\s+(?=,)", RegexOptions.None);
   var duplicateCommas = new Regex(@"[,]{2,}", RegexOptions.None);
   var loneComma = new Regex(@",(?=[^\s])", RegexOptions.None);
   var multiCommaAndSpace = new Regex(@"(, ){2,}", RegexOptions.None);

   source = duplicateSpaces.Replace(source, " ");
   source = duplicateCommas.Replace(source, ",");
   source = spacesBeforeCommas.Replace(source, "");
   source = loneComma.Replace(source, ", ");
   source = multiCommaAndSpace.Replace(source, ", ");

   //Trim the crud 
   source = source.Trim(',', ' ');

   return source;
}

測試用例

var test1 = " , aaa,bbb ,, , ccc, ddd,,  eee   fff , , ggg , hhh ," 
var test2 = ",, aaa,bbb ,, , ccc, ddd,,  eee   fff , , ggg , hhh ,, " 
var test3 = ",,  ,," 

預期結果

var Result1 = "aaa, bbb, ccc, ddd, eee fff, ggg, hhh" 
var Result2 = "aaa, bbb, ccc, ddd, eee fff, ggg, hhh" 
var Result3 = "" 

雖然我想知道是否有辦法刪除幾個多余的步驟。

注意:這是一個可量化的問題,即減少更智能的正則表達式所涉及的步驟。

我有另一種解決方案,僅使用string內置函數和一點Regex.Replace

public string CleanString(string rawString)
{
    if (string.IsNullOrWhiteSpace(rawString)) return rawString;

    rawString = Regex.Replace(rawString, @"\s+", " ");
    rawString = Regex.Replace(rawString, @"(?<=,)\s+|\s+(?=,)", "");
    return string.Join(", ", rawString.Trim().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)).Trim();
}

在此處輸入圖片說明

我建議如下:

  1. 減少單詞前的空格數: \\s+\\b\\s
  2. 照顧好你的逗號。
  3. 挑出剩余的逗號: [,\\s]*, with ,

這也將刪除每個字符串末尾的空格。

希望這會有所幫助。

我設法從John Woo那里得到了一些靈​​感

 source = Regex.Replace(source, "[ ]{2,}", " ");
 source = Regex.Replace(source, "[, ]*,[, ]*", ", ");
 return source.Trim(',', ' '); 
  • 刪除雙空格
  • 刪除所有逗號和空格,其中至少有 1 個逗號
  • 和 Trim 來處理開始和結束

似乎只是按空格和逗號分割就足夠了:

public string CleanSentence(string source)
{
   return string.Join(", ", (source ?? "").Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM