2014-01-19 2 views
0

Допустим, у меня есть эта строка подключения сервера SQL в C#:Regex изменить строку подключения

Driver={SQL Server};server=.\sqlexpress;uid=myid;pwd=password; 

Я хотел бы, чтобы удалить драйвер = часть строки, независимо от того, где он появляется в строке. Так что это выглядит следующим образом:

server=.\sqlexpress;uid=myid;pwd=password; 

Я пробовал Regex какое-то время, не повезло.

+0

Не могли бы вы поместить это регулярное выражение, которое вы попытались в своем вопросе? – Jerry

ответ

1

Вы можете использовать это:

string pattern = @"\bDriver=[^;]+;"; 
string replacement = ""; 
Regex rgx = new Regex(pattern); 
string result = rgx.Replace(input, replacement); 
+0

does '[^;]' включить разрывы строк? (просто интересно) –

+0

@RoyiNamir: действительно, разрывы строк включены. Это проблема? –

+0

Doh! Я делал это слишком сложным. Благодаря! –

2

Вы ищете класс OdbcConnectionStringBuilder, который проанализирует это для вас.

2

Вы можете сделать это следующим образом:

res = Regex.Replace(connStr, "Driver=[{][^}]*[}];", ""); 

Для вашей строки она производит

server=.\sqlexpress;uid=myid;pwd=password; 

Demo on ideone.

0

Может не работать как он стоит, но я надеюсь, что вы получите идею:

string result = string.Join(";", connectionString 
    .Split(';') 
    .Where(p => !p.StartsWith('Driver')) 

В качестве примечания, я нахожу это удивительным, что есть четыре совершенно разные решений;)

0

Расширять от ответа SLaks дал:

[TestMethod] 
public void TestMethod1() 
{ 
    var connStr = "Driver={SQL Server};server=.\\sqlexpress;uid=myid;pwd=password;"; 
    var builder = new DbConnectionStringBuilder(); 
    builder.ConnectionString = connStr; 
    builder.Remove("Driver"); 
    connStr = builder.ConnectionString; 
    Assert.AreEqual("server=.\\sqlexpress;uid=myid;pwd=password", connStr); 
} 
Смежные вопросы