使用正则表达式选择一个值

时间:2010-11-05 09:18:28

标签: c# .net regex

我的格式为字符串:

PROVIDER=Sybase.ASEOLEDBProvider.2;User ID=sa;Server Name=UKServer;Server Port Address=5001;Initial Catalog=master

现在可以在C#中使用正则表达式获取服务器名称的值吗?

请注意,服务器名称可以位于字符串中的任何位置,并且“=”的任何一侧可能有也可能没有空格,即fomate可能

... Server Name=UKServer;....
... Server Name = UKServer;....
... Server Name =UKServer;....
... Server Name= UKServer;....

4 个答案:

答案 0 :(得分:3)

你真的不需要自己解析连接字符串;方便的OdbcConnectionStringBuilder课程可以为你做。它实现IDictionary,允许您按键检索连接字符串的所有属性。我确信它对你提到的不同类型的输入有合理的抵抗力,例如:额外的空白区域,关键字对的不同排序等等。

以下是针对您的样本进行测试的示例:

var connString = @"PROVIDER=Sybase.ASEOLEDBProvider.2;User ID=sa;Server Name=UKServer;Server Port Address=5001;Initial Catalog=master";

var connStringBuilder = new OdbcConnectionStringBuilder(connString);
var serverName = connStringBuilder["Server Name"].ToString();

答案 1 :(得分:1)

_serverName = RegEx.Match(inputString, "Server Name ?= ?([\\w]+);").Groups(1).Value;

故障:

Server Name ?= ?  // Normal string, the ? means that the preceding character
                  // or group is optional (0 or 1)
([\w]+);          // The parentheses define a group (the Group(0) is the
                  // always the whole match), so that you can easily get a
                  // substring of the match.
[\w]+             // Matches any alphabetical character, number or underscore

答案 2 :(得分:0)

这样的事情应该有效:

"Server Name\s*=\s*(\w+)\s*;"

答案 3 :(得分:0)

这样的事情怎么样:

[^&]*(i?)(Server Name\s|)((i?)[a-z]);

_serverName = RegEx.Match(inputString, "[^&]*(i?)(Server Name\s|)((i?)[a-z]);").Groups(2).Value;