2010-12-11 25 views
10

Bir dizeden tüm özel karakterleri kaldıracak bir C# işlevine ihtiyacımız var.Regex özel karakterleri kaldırın

Ayrıca, "George'un" "George" u değiştirmek mümkün mü (hem tek alıntı hem de karakterleri kaldır)?

+3

En azından tanımlamak' Herhangi 'ya da kaldıracaktır özel karakteri Msgstr " – BoltClock

+0

" demek istediniz: tüm bu harf, sayı veya boşluk değil mi? –

cevap

37

Bu yöntem, harfler, sayılar ve boşluklardan her şeyi kaldırır. Ayrıca 'Birçok insanlar ihtiyaç gibi Tıpkı iyi A-Z ekleyin.

public static string RemoveSpecialCharacters(string input) 
{ 
    Regex r = new Regex("(?:[^a-z0-9 ]|(?<=['\"])s)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled); 
    return r.Replace(input, String.Empty); 
} 
+0

Merhaba Ryan, Kod için teşekkürler. İyi çalışıyor. Beyaz alanı görmezden gelmek mümkün mü? Beyaz boşluğun orada olmasını istiyorum. Teşekkürler. – user374760

+0

Cevap bu ise, bu şekilde işaretlemeyi unutmayın. –

+0

Merhaba Ryan, Beyaz boşlukları dizeden kaldırmak istemiyoruz. Lütfen nasıl yapılacağını bana bildirin. Çözüm olarak işaretledim. Teşekkürler. – user374760

0

özel karakterinin ne olduğunu biliyorsak yardımcı olabilirdik. O, onun yerine istemiyorum diğerlerini sıralandıran tutmak istediğiniz karakterlerin bir listesini tanımlamak için hile

public bool IsSpecialChar(char c) { 
    // Need you to fill this out 
} 

public string RemoveSpecialChars(string s) { 
    var builder = new System.Text.StringBuilder(); 
    foreach (var cur in s) { 
    if (!IsSpecialChar(cur)) { 
     builder.Append(cur); 
    } 
    } 
    return builder.ToString(); 
} 
0

Its daha iyi yapacak olsa İşte fonksiyon. Örneğin, perlregexes s/[^A-Za-z0-9]+//g kullanmak sözcük olmayan sözcükleri kaldıracaktır (özür dilerim, C# regexes: D ile aşina değilim).

Diğer sorunlarınız için, belirli durumlarda dikkat etmeniz gereken bir önceki sözcüğe göre neyin kaldırılacağını tanımlayabilirsiniz (yalnızca önceki bir kelime varsa 's kaldırılıyor gibi), aksi takdirde yalnızca 's arasındaki tüm yinelemeleri kaldırın.

+1

Sanırım sen/\ W + // g 'anlamına geldiğini (' tr /// 'regex-powered değil, ve" set "kelimesi karakterler "[A-Za-z0-9]' dan çok daha fazlasını içerir.) C# versiyonu Regex.Replace (giriş, @ "\ W +", String.Empty) 'dir. –

+0

@Alan Moore haklıyım, bunu unutuyorum =). kelime karakterleri, bunun farkındayım, aslında istediği şeyin bu olduğunu düşündüm. – javs

+0

Evet, ikimizi de trakristlerden azarlamak için kelime karakterleri hakkında attım. : D –

1
public static string RemoveSpecialCharacters(string input) 
{  
    Regex r = new Regex(
        "(?:[^a-zA-Z0-9 ]|(?<=['\"])s)", 
        RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled); 
    return r.Replace(input, String.Empty);  
} 

Ryan'ın cevabı doğru. Karakter s izledi

İlgili konular