SORU
15 Mayıs 2011, Pazar


Sadece Düzenli ifade ile bazı grupların değiştirin

Hadi aşağıdaki normal ifade olduğunu varsayalım:

-(\d )-

C kullanarak değiştirmek istiyorum# Grup elde etmek için AA 6* 1 *:

-AA-

Şimdi bunu kullanarak değiştiriyorum:

var text = "example-123-example";
var pattern = @"-(\d )-";
var replaced = Regex.Replace(text, pattern, "-AA-"); 

Ama gerçekten sevmiyorum bu, çünkü değiştirirsem desen maç _(\d )_ bunun yerine, ben değiştirmek yerine string _AA_ de, ve bu karşı KURU prensibi.

Gibi bir şey arıyorum:

Tam olarak eşleşen metni tutmak, ama this text another text... Grup 2 ile Grup 1 olarak değiştirin

Düzenleme:
Bu sadece bir örnekti. Sadece yukarıda söylediklerim yapmanın genel bir yol arıyorum.

İçin çalışması gerekir:

anything(\d )more_text ve herhangi bir desen seni hayal edebiliyorum.

Tek istediğim sadece gruplar değiştirin ve maçın geri kalanı tutmak.

CEVAP
15 Mayıs 2011, Pazar


İyi bir fikir grupları içinde her şeyi saklanması için, onları tanımlamak için ihtiyaç olup olmamasının bir anlamı olabilir. Bu şekilde yedek dize onları kullanabilirsiniz. Örneğin:

var pattern = @"(-)(\d )(-)";
var replaced = Regex.Replace(text, pattern, "$1AA$3"); 

ya kullanarak bir MatchEvaluator:

var replaced = Regex.Replace(text, pattern, m => m.Groups[1].Value   "AA"   m.Groups[3].Value);

Başka bir yol, biraz dağınık, geriye ilerleme/bir ilerleme kullanıyor olabilir:

(?<=-)(\d )(?=-)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 1881 Animation

    1881 Animati

    5 EKİM 2013
  • My name is Festis and I'm free

    My name is F

    2 EKİM 2011
  • TecnoTutosPC

    TecnoTutosPC

    19 Kasım 2012