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

  • 30GB

    30GB

    14 AĞUSTOS 2006
  • Kanaal van Dj0fifty

    Kanaal van D

    28 EKİM 2011
  • Press Start

    Press Start

    4 HAZİRAN 2006