folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Sadece 1 Tanesini Replace (Değiştirme) Nasıl Yapılır



Sadece 1 Tanesini Replace (Değiştirme) Nasıl Yapılır

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    Ş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.


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Regexle yakalıyorsanız, replace all yapmayın. Matchların konumlarını bulun (başlangıç ve uzunluk) bir diziye atın. O diziden rastgele bir girdiyi replace edin.


    Olaylara karışmayın!
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    solstice
    solstice's avatar
    Kayıt Tarihi: 04/Nisan/2008
    Erkek

    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;
    ?>

     


    https://www.youtube.com/watch?v=k6LrGZGqYn8
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    [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]


    Olaylara karışmayın!
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    Aslında ilkini Replace etmesi kafi.

    Regex ile halledemedim bir türlü.


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    CEO
    CEO's avatar
    Kayıt Tarihi: 28/Şubat/2009
    Erkek

    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
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek

    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.


    Hello, i am nothing. I come from Neverland.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    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

    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.