Sadece 1 Tanesini Replace (Değiştirme) Nasıl Yapılır
-
Şimdi arkadaşlar, asp.net (c#) kullanarak yaptığım bir projede bazı kelimeleri replace etmekteyim. (Etiket sistemi).
Orada yapamadığım nokta şu oldu.
Örnek:
"Türkiye'nin yeni gündemini Ankara belirliyor. Alınan son bilgilere göre Ankara dışından turist akını başladı. Ankara Büyükşehir Belediyesi ne yapmayı düşünüyor?"
Bu cümlede 3 tane Ankara kelimesi geçiyor ve bunların üçü de şu şekilde replace ediliyor
<a href="/etiket/ankara">Ankara</a>
Yapmak istediğim ise, bu 3 tanesinden yalnızca birisi replace yapılabilsin.
Şimdiden teşekkürler.
-
-
Php den çevirilebilirsen yada çevirecek arkadaşlar vardır.
<?php $string = 'Türkiye nin yeni gündemini Ankara belirliyor. Alınan son bilgilere göre Ankara dışından turist akını başladı. Ankara Büyükşehir Belediyesi ne yapmayı düşünüyor?'; $array = array('<a href="/etiket/ankara">Ankara</a>'); $count = count($array); $search = 'Ankara'; $searchlen = strlen($search); $newstring = ''; $offset = 0; for($i = 0; $i < $count; $i++) { if (($pos = strpos($string, $search, $offset)) !== false){ $newstring .= substr($string, $offset, $pos-$offset) . $array[$i]; $offset = $pos + $searchlen; } } $newstring .= substr($string, $offset); echo $newstring; ?> -
[code]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace CSRastgeleDegistir
{
class Program
{
static void Main(string[] args)
{
string str = "Ankara Ankara güzel Ankara\r\nSeni görmek ister her bahtı kara";
var l = RastgeleDegistir(str, "Ankara", "asdasd");
Console.WriteLine(l);
Console.ReadKey();
}
private static string RastgeleDegistir( string metin, string aranan, string yerine)
{
Regex r = new Regex(aranan);
var eslesenler = r.Matches(metin);
int i = new Random().Next(eslesenler.Count);
var baslangıc = eslesenler[i].Index;
var uzunluk = eslesenler[i].Length;
return metin.Substring(0, baslangıc) + yerine + metin.Substring(baslangıc + uzunluk);
}
}
}
[/code]
-
Aslında ilkini Replace etmesi kafi.
Regex ile halledemedim bir türlü.
-
Bir tane bool türünde deişken yap hacı abi ilk değeri true olsun, if kontrolü ile true ise replace yap daha sonra değerini false yaptığında zaten koşul sağlanmadığı için diğerlerini replace etmeyecektir.
İlk kelimeyi düzeltebilmesi için de string fonksiyonlarından yardım alman gerekecek tabii. String.indexof vs.
Benim yorumlamam bu kadar.
CEO tarafından 06/Eki/15 12:59 tarihinde düzenlenmiştir -
regex en temiz çözüm olur ama yapamıyorsan. boşluklardan parse edip bir diziye at. for ile döndür, ilk ankarayı görünce değiştirip break ile for' dan uzaklaş ilişkin bitsin. sonra hepücüğünü tekrar yapıştır gelsin.
-
Tamam arkadaşlar hallettim. İşine yarayan olur diye buraya aktarayım.
public String fnBir_Tanesini_Degistir(String parMetin, String parAranan, String parYerine) { String strDonen_Deger = ""; if (parMetin.IndexOf(parAranan) > -1) { Regex r = new Regex(parAranan); var eslesenler = r.Matches(parMetin); //int i = new Random().Next(eslesenler.Count); var baslangic = eslesenler[0].Index; var uzunluk = eslesenler[0].Length; strDonen_Deger = parMetin.Substring(0, baslangic) + parYerine + parMetin.Substring(baslangic + uzunluk); } else { strDonen_Deger = parMetin; } return strDonen_Deger; }@YeniHarman, ayrıca teşekkürler.
ontedi tarafından 06/Eki/15 13:13 tarihinde düzenlenmiştir
