如何根据多个关键字拆分字符串?

Tec*_*ner 0 c#

我有一个字符串,其中的字符串值由特殊字符“;”分隔 我需要拆分字符串并将每个值存储在单独的字符串中。在我的 ipStr 中,像 ServerName、DBName、TableNames 和 ColumnNames 这样的关键字是标识符,它不会改变,只有值可能会改变。

例如。

string ipStr = "ServerName=DevTestServer;DBName=CustomerSummary;TableNames=CustomerDetails&OrderDetails;ColumnNames=ID,CustName,OrderID;"
Run Code Online (Sandbox Code Playgroud)

现在我想分别拆分 ServerName、DBName、TableNames 和 ColumnNames 值,并将每个值存储在不同的字符串中。我在下面尝试过,但在找到 ServerName 后,识别 DBName 部分看起来很困难,而且它看起来也不像是正确的编码方式。

string ServerIdentifier = "ServerName=";
string separator = ";";
string serverName = ipStr.Substring(ipStr.IndexOf(ServerIdentifier), ipStr.IndexOf(delimiter));
Run Code Online (Sandbox Code Playgroud)

从 ipStr 获取如下值的最简单方法是什么?

string ServerName="DevTestServer";
string DBName="CustomerSummary";
string TableNames="CustomerDetails&OrderDetails";
string ColumnNames="ID,CustName,OrderID";
Run Code Online (Sandbox Code Playgroud)

AAA*_*ddd 7

SqlConnectionStringBuilder不起作用,因为ServerNameetc 不是连接字符串中的有效标记。

然而,一种低技术含量的方法是使用一种老式的SplitToDictionary

var someWeirdStr = "ServerName=DevTestServer;DBName=CustomerSummary;TableNames=CustomerDetails&OrderDetails;ColumnNames=ID,CustName,OrderID;";

var results = someWeirdStr
   .Split(';',StringSplitOptions.RemoveEmptyEntries)
   .Select(x => x.Split('='))
   .ToDictionary(x => x[0], x => x.ElementAtOrDefault(1));

Console.WriteLine(results["ServerName"]);
Console.WriteLine(results["DBName"]);
Console.WriteLine(results["TableNames"]);
Console.WriteLine(results["ColumnNames"]);
Run Code Online (Sandbox Code Playgroud)

输出

DevTestServer
CustomerSummary
CustomerDetails&OrderDetails
ID,CustName,OrderID
Run Code Online (Sandbox Code Playgroud)