2012-12-24 14 views
5

Eşleşmeleri bulmak için bir RegEx deseninde semboller kullanmak istiyorum ancak bunları değiştirmek istemiyorum. Bu C# sınıf ve ad alanı manipülasyonu içindir. ÖrneğinRegEx - Sembolleri kullanarak eşleştirin ancak onları değiştirmeyin.

:

MyNamespaceLib.EntityDataModel.TestsMyClass+MyInnerClass

(Not sadece "Testleri" görüntülendiğinde değiştirin:

MyNamespaceLib.EntityDataModelTests.TestsMyClassTests+MyInnerClassTests

olarak değiştirilmelidir sonunda ad alanı bölümü ve sınıf/ad alanı adının bir parçası olmadığı zaman)

Eşleşmeleri bulmak için ilk bölümü doğru bulmayı başardım, ancak sembolleri değiştirilen eşleşmede tutmak için mücadele ediyorum.

var input = "MyNamespaceLib.EntityDataModelTests.TestsMyClassTests+MyInnerClassTests";

var output = Regex.Replace(input, "Tests[.+]|$", "");

Ben olmayan bir yakalama grubunu kullanarak denedim, ama ben yol için tasarlanmadığı şüpheli:

Şimdiye kadar var onu kullanmaya çalışıyor.

Teşekkürler!

cevap

6

Ne yapmak isterseniz eşleşmeleri yerine . veya + mu?

@"Tests(?![.+])" 
+0

Hayır, tam tersi, ".", "+" Veya satır sonu ile sonlanan eşleşmeleri değiştirmek istiyorum. Ancak "Testler" kelimesi bir ad alanı veya sınıf adı içinde görünüyorsa, değiştirilmemelidir. – Steve

+0

@ user1927385: 'Testler (?! [^. +])', Sonra. – Ryan

+0

Güzel, bu mükemmel çalıştı. Regex'te hiç meraklı kullanmadım, o yüzden biraz daha okuyacağım. Teşekkürler minitech. – Steve

1

Sen dize anında oluşturulan maçı yerine Regex.Replace yönteminin MatchEvaluator aşırı kullanabilirsiniz: Bir lookahead kullanın. yapabilirsiniz, minitech yorumuna başına,

var output = Regex.Replace(input, @"Tests([.+]|$)", m => m.Groups[1].Value); 

Ayrıca: Bir yakalama grubundaki özel simbol olsun (ve ilk yakalama grubunu maçın daima Grup 1 olan) ve bu gibi değerle maçı yerine Ayrıca gibi Regex.Replace ait (dize, dize) aşırı ilk yakalama grubu için 1 $ kullanın: Eğer bir aptal yapmak her zaman, böylece söz konusu

var output = Regex.Replace(input, @"Tests([.+]|$)", "$1"); 

, regex sıklıkla edilir salt kod ve basit değiştirin:

var output = input.Replace("Tests+","").Replace("Tests.","") ...; 
+0

Evet, işe yarayacaktı, bir tane RegEx deseniyle tamamlamaya çalışıyordum. Bu son işe işe yaramazsa. – Steve

+0

Evet, bu [bu Regex.Replace aşırı yük] ile yapıldığında (http://msdn.microsoft.com/en-us/library/cft8645c.aspx), bir dakikada bir örnek hazırlamaya çalışacağım. – SWeko

+0

Bir grubun değeriyle bir şey değiştirmek isterseniz, bunu bir dizenin içinde yapabilirsiniz: 'Regex.Replace (...," $ 1 ")' – Ryan

İlgili konular