Misalkan saya memiliki regex berikut:
-(\d+)-
dan saya ingin mengganti, menggunakan C #, Grup 1 (\d+)
dengan AA
, untuk mendapatkan:
-AA-
Sekarang saya menggantinya menggunakan:
var text = "example-123-example";
var pattern = @"-(\d+)-";
var replaced = Regex.Replace(text, pattern, "-AA-");
Tapi saya tidak terlalu suka ini, karena jika saya mengubah pola untuk mencocokkan _(\d+)_
sebagai gantinya, saya harus mengganti string pengganti _AA_
juga, dan ini bertentangan dengan prinsip KERING.
Saya mencari sesuatu seperti:
Pertahankan teks yang cocok persis seperti apa adanya, tetapi ubah Grup 1 dengan this text
dan Grup 2 dengan another text
...
Sunting:
Itu hanya contoh. Saya hanya mencari cara umum untuk melakukan apa yang saya katakan di atas.
Ini harus bekerja untuk:
anything(\d+)more_text
dan pola apa pun yang dapat Anda bayangkan.
Yang ingin saya lakukan adalah mengganti hanya grup, dan mempertahankan sisa pertandingan.
:)
. Menurut pendapat saya, solusi itu jauh lebih baik dan lebih bersih daripada menggunakan lookahead dan lookbehinds..Value
kem.Groups[1]
dll.(?:foo)(bar)
,$1
akan digantibar
. lebih detailAnda dapat melakukan ini menggunakan lookahead dan lookbehind :
sumber
Saya juga membutuhkan ini dan saya membuat metode ekstensi berikut untuk itu:
Pemakaian:
Hasil:
sumber
Jika Anda tidak ingin mengubah pola, Anda dapat menggunakan properti Indeks Grup dan Panjang grup yang cocok.
sumber
Berikut ini adalah opsi bersih lain yang bagus yang tidak perlu mengubah pola Anda.
sumber
buka kode di bawah ini untuk mendapatkan penggantian kelompok yang terpisah.
sumber
Ini adalah versi yang mirip dengan Daniel tetapi mengganti beberapa kecocokan:
sumber