匹配SQL连接字符串与Regex的部分

我编写了一个正则表达式来匹配SQL连接字符串的部分。 在第一个规范中,初始目录等被强制不包含特殊字符。 所以我有

string strConn = "Data Source=VAIOE;Initial Catalog=SomeTextOnlyCatname;Integrated Security=True;Persist Security Info=True;MultipleActiveResultSets=True;Connect Timeout=0;"; Regex databaseNameRegex = new Regex(@"(?i)\b(Initial\sCatalog|Database)\b\s?=\s?(\w+\s*)*;?"); 

现在,我需要匹配可能具有符号,标点符号等名称的部分。例如

 string strConn = "Data Source=VAIOE;Initial Catalog=N3wC@t@l0gName*6Symbols;Integrated Security=True;Persist Security Info=True;MultipleActiveResultSets=True;Connect Timeout=0;"; 

我要返回的地方Initial Catalog=N3wC@t@l0gName*6Symbols

我试过了

 Regex databaseNameRegex = new Regex(@"(?i)\b(Initial\sCatalog|Database)\b\s?=\s?(\w+\p{P}*\p{M}*\p{Z}*\s*)*;?"); 

但由于连接字符串中存在分号,这会失败。 处理这个问题的最佳正则表达式是什么?

谢谢你的时间。

您可以使用SqlConnection为您解析连接字符串并避免使用RegEx吗? 如果您只需要数据库名称,则以下内容应该有效:

 var conn = new SqlConnection(strConn); Console.WriteLine(conn.Database); 

编辑

Allon Guralnek提供了一个更好的方法 – 谢谢!

使用SqlConnectionStringBuilder – 它将提取您需要的任何信息。

 var connBuilder = new SqlConnectionStringBuilder(strConn); Console.WriteLine(connBuilder.InitialCatalog);