44 votes

Comment supprimer des caractères non alphanumériques (y compris les espaces) d'une chaîne?

Comment supprimer les caractères non alphanumériques d'une chaîne et les espaces libres en C # avec Remplacer?

Je veux garder az, AZ, 0-9 et rien de plus (pas même des espaces "").

 "Hello there(hello#)".Replace(regex-i-want, "");
 

devrait donner

 "Hellotherehello"
 

J'ai essayé "Hello there(hello#)".Replace(@"[^A-Za-z0-9 ]", ""); mais les espaces restent.

61voto

Tim Pietzcker Points 146308

Dans votre regex, vous avez exclu les espaces de l'association (et vous n'avez pas utilisé Regex.Replace() qui j'avais négligé complètement...):

result = Regex.Replace("Hello there(hello#)", @"[^A-Za-z0-9]+", "");

devrait fonctionner. L' + rend la regex un peu plus efficace par correspondance de plus d'un consécutives caractère non-alphanumérique au lieu de les traiter un par un.

Si vous souhaitez conserver les non-ASCII des lettres/chiffres, aussi, utiliser la regex suivante:

@"[^\p{L}\p{N}]+"

ce qui laisse

BonjourmesélèvesGutenMorgenliebeSchüler

au lieu de

BonjourmeslvesGutenMorgenliebeSchler

3voto

Adrianne Points 108

Ou vous pouvez le faire aussi:

     public static string RemoveNonAlphanumeric(string text)
    {
        StringBuilder sb = new StringBuilder(text.Length);

        for (int i = 0; i < text.Length; i++)
        {
            char c = text[i];
            if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9')
                sb.Append(text[i]);
        }

        return sb.ToString();
    }
 

Usage:

 string text = SomeClass.RemoveNonAlphanumeric("text LaLa (lol) á ñ $ 123 ٠١٢٣٤");

//text: textLaLalol123
 

2voto

James Points 3068

L'erreur commise ci-dessus a été d'utiliser incorrectement Replace (cela ne prend pas d'expression régulière, merci CodeInChaos).

Le code suivant doit faire ce qui a été spécifié:

 Regex reg = new Regex(@"[^\p{L}\p{N}]+");//Thanks to Tim Pietzcker for regex
string regexed = reg.Replace("Hello there(hello#)", "");
 

Cela donne:

 regexed = "Hellotherehello"
 

2voto

Et comme opération de remplacement comme méthode d'extension:

 public static class StringExtensions
{
    public static string ReplaceNonAlphanumeric(this string text, char replaceChar)
    {
        StringBuilder result = new StringBuilder(text.Length);

        foreach(char c in text)
        {
            if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9')
                result.Append(c);
            else
                result.Append(replaceChar);
        }

        return result.ToString();
    } 
}
 

Et test:

 [TestFixture]
public sealed class StringExtensionsTests
{
    [Test]
    public void Test()
    {
        Assert.AreEqual("text_LaLa__lol________123______", "text LaLa (lol) á ñ $ 123 ٠١٢٣٤".ReplaceNonAlphanumeric('_'));
    }
}
 

0voto

var text = "Hello there(hello#)";

var rgx = new Regex("[^a-zA-Z0-9]");

text = rgx.Replace(text, string.Empty);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X