Comment supprimer les caractères non alphanumériques d'une chaîne et les espaces libres en C # avec Remplacer?
Je veux garder a-z, A-Z, 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.
Dans votre expression régulière, vous avez exclu les espaces d'être mis en correspondance (et vous n'avez pas utilisé Regex.Replace()
que j'avais complètement ignoré ...):
result = Regex.Replace("Hello there(hello#)", @"[^A-Za-z0-9]+", "");
devrait marcher. Le +
rend la regex un peu plus efficace en faisant correspondre plus d'un caractère non alphanumérique consécutif à la fois au lieu d'un par un.
Si vous souhaitez également conserver les lettres/chiffres non ASCII, utilisez l'expression régulière suivante:
@"[^\p{L}\p{N}]+"
qui laisse
BonjourmesélèvesGutenMorgenliebeSchüler
au lieu de
BonjourmeslvesGutenMorgenliebeSchler
Vous pouvez utiliser Linq pour filtrer les caractères requis:
String source = "Hello there(hello#)";
// "Hellotherehello"
String result = new String(source
.Where(ch => Char.IsLetterOrDigit(ch))
.ToArray());
Ou
String result = String.Concat(source
.Where(ch => Char.IsLetterOrDigit(ch)));
Et donc vous n'avez pas besoin de expressions régulières.
Ou vous pouvez aussi le faire:
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
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('_'));
}
}
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"
var text = "Hello there(hello#)";
var rgx = new Regex("[^a-zA-Z0-9]");
text = rgx.Replace(text, string.Empty);