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

  • Ben Vivona

    Ben Vivona

    24 Ocak 2010
  • New Challenger - Game Reviews

    New Challeng

    20 Temmuz 2006
  • Videojug

    Videojug

    25 EKİM 2006