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

  • hydejiaqi

    hydejiaqi

    12 Mart 2008
  • technodromeband's channel

    technodromeb

    28 NİSAN 2011
  • The Pet Collective

    The Pet Coll

    5 Ocak 2012