2016-03-30 19 views
1

Dinamik olarak bir filtre ifadesi oluşturmalıyım. Bu yüzden filtreyi eşleştirmek ve değiştirmek istiyorum.Eşleşen filtre ifade metni

Ben değiştirmek istiyor
string input = " (Country = \"Brazil\" OR Country = \"Canada\") AND CompanyName.Contains(\"Contoso\") "; 

, CompanyName.Contains (\ "Contoso \") Şirket Adı farklı bir ad olabilir: Örneğin aşağıdaki dize var.

string input = " (Country = \"Brazil\" OR Country = \"Canada\") AND CompanyName.Contains(\"Contoso\") "; 
string replacement = "123456"; 
string pattern = @"(CompanyName.Contains\()"; 

// \"[^\"]*\" 

Regex rgx = new Regex(pattern); 
string result = rgx.Replace(input, replacement); 

Console.WriteLine(result); 

Benim filtre ifadesi yanlış olduğunu görünüyor:

İşte benim kodudur. Ne olmalı?

+0

Bence bir ['\ bCompanyName \ .Contains \ ([^()] * \)'] (http://regexstorm.net/tester?p=%5cbCompanyName%5c.Contains%5c (%) 5b% 5e()% 5d *% 5 c) ve i = + (Ülke +% 3d +% 22Brazil% 22 ± OR + Ülke +% 3d +% 22Canada% 22) + ve + CompanyName.Contains (% 22Contoso% 22) + r = 123456) –

+0

bu çalışmalara teşekkür ederim – Hristo

+0

Harika, bir cevap gönderdim, lütfen aşağıya bakın. Bu konuda daha fazla endişeniz varsa lütfen yorum göndermekten çekinmeyin. –

cevap

1

İfadenizde noktadan kaçınılamaz ve yalnızca ( açılışından hemen sonra gerekli olan CompanyName.Contains("Contoso") bölümünün bir kısmı ile eşleşir. Sen regex demo

\b Bkz

var pattern = @"\bCompanyName\.Contains\([^()]*\)"; 

kullanabilirsiniz

bir kelime sınırı maçları, kaçan bir nokta değişmez nokta eşleşir ve \([^()]*\)( ve ) dışındaki 0+ karakterlerle ardından ( maçları (negatif karakter sınıfı [^()] nedeniyle).