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

  • DragsterMC Gaming

    DragsterMC G

    30 HAZİRAN 2013
  • Fraser Raft

    Fraser Raft

    9 Mart 2010
  • Kayla Caton - Peet

    Kayla Caton

    23 HAZİRAN 2012