簡體   English   中英

將Regex.Matches連接到一個字符串

[英]Concatenates Regex.Matches to a string

這是我在Stack上的第一個問題我有這樣的字符串

string str = "key1=1;main.key=go1;main.test=go2;key2=2;x=y;main.go23=go23;main.go24=test24";

應用匹配模式以提取以main開頭的所有字符串。 返回

Regex regex = new Regex("main.[^=]+=[^=;]+");       
MatchCollection matchCollection = regex.Matches(str);

我試過這個來連接匹配集合

string flatchain = string.Empty;
foreach (Match m in matchCollection)
{
    flatchain = flatchain +";"+ m.Value; 
}

有沒有更好的方法來使用LINQ?

您可以嘗試將結果轉換為數組並應用string.Join將字符串置於此處,您必須明確指定Match類型,因為MatchCollection non-generic IEnumerable類型

  var toarray = from Match match in matchCollection select match.Value;
                string newflatChain = string.Join(";", toarray); 

或者如果你只想要一行,你可以像下面這樣做

string newflatChain = string.Join(";", from Match match in matchCollection select match.Value);

作為單線,這將是

var flatchain = string.Join(";", matchCollection.Cast<Match>().Select(m => m.Value));

轉換的原因是MatchCollection僅實現舊的非通用IEnumerable版本。

只需使用LINQs Aggregate 例如:

var strIn = "key1=1;main.key=go1;main.test=go2;key2=2;x=y;main.go23=go23;main.go24=test24";

var strOut = Regex
             .Matches(str, "(main.[^=]+=[^=;]+)", RegexOptions.Multiline)
             .Cast<Match>()
             .Select(c => c.Value)
             .Aggregate(( a, b ) => a + ";" + b);

注意:由於Match屬性Value具有私有setter,因此無法繞過LINQs Select因為我們需要在Aggregate的lambda表達式中分配字符串。

暫無
暫無

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

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