[英]Regex, comma and space handling
我需要以下內容
簡而言之,這只是一個基本的整潔的句子(關於逗號和空格)。
我目前的解決方案正在工作,但我想知道是否有辦法通過更智能的“正則表達式”表達式減少看似多余的步驟
當前解決方案
[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();
}
我建議如下:
\\s+\\b
和\\s
[,\\s]*,
with ,
這也將刪除每個字符串末尾的空格。
希望這會有所幫助。
我設法從John Woo那里得到了一些靈感
source = Regex.Replace(source, "[ ]{2,}", " ");
source = Regex.Replace(source, "[, ]*,[, ]*", ", ");
return source.Trim(',', ' ');
似乎只是按空格和逗號分割就足夠了:
public string CleanSentence(string source)
{
return string.Join(", ", (source ?? "").Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.