如何编写正则表达式来从连接字符串中获取部分?

时间:2011-09-01 07:17:55

标签: c# regex

如何编写正则表达式来提取元数据,提供者,提供者连接字符串的内容 来自

 metadata=res://*/ent.csdl|res://*/ent.ssdl|res://*/ent.msl;provider=System.Data.SqlClient;provider connection string="Data Source=1.1.1.1;Initial Catalog={0};Persist Security Info=True;User ID=user;Password=pass;MultipleActiveResultSets=True"

我的意思是,我想得到

元数据: res://*/ent.csdl|res://*/ent.ssdl|res://*/ent.msl

提供商: System.Data.SqlClient

提供商连接字符串: Data Source=1.1.1.1;Initial Catalog={0};Persist Security Info=True;User ID=user;Password=pass;MultipleActiveResultSets=True

3 个答案:

答案 0 :(得分:5)

不假设ConnString的任何特定顺序:

var connString = @"metadata=res://*/ent.csdl|res://*/ent.ssdl|res://*/ent.msl;provider=System.Data.SqlClient;provider connection string=""Data Source=1.1.1.1;Initial Catalog={0};Persist Security Info=True;User ID=user;Password=pass;MultipleActiveResultSets=True""";
Regex metaRegex = new Regex(@"metadata=(?<metadata>[^;]+)");
Regex connRegex = new Regex(@"provider\sconnection\sstring=""(?<conn>[^""]+)");
Regex providerRegex = new Regex(@"provider=(?<provider>[^;]+)");
Console.WriteLine("MetaData: " + metaRegex.Match(connString).Groups["metadata"]);
Console.WriteLine("Connection String: " + connRegex.Match(connString).Groups["conn"]);
Console.WriteLine("Provider: " + providerRegex.Match(connString).Groups["provider"]);

答案 1 :(得分:1)

正则表达式如:

^(res:[^;]+);provider=([^;]+);provider\sconnection\sstring=\"(.+)\"$

为您提供3个捕获组,提供您需要的部分。

实例:http://rextester.com/rundotnet?code=JRGSO74516

答案 2 :(得分:0)

您可以使用命名捕获组来定义每个类别的模式,这些模式由.Net RegEx匹配支持。有关命名捕获组的说明,请参阅here