如何从string中删除除破折号以外的所有非字母数字字符?

除了短划线和空格字符以外,如何从string中删除所有非字母数字字符?

用空stringreplace[^a-zA-Z0-9 -]

 Regex rgx = new Regex("[^a-zA-Z0-9 -]"); str = rgx.Replace(str, ""); 

我可以使用正则expression式,他们可以提供优雅的解决scheme,但他们可以导致性能问题。 这是一个解决scheme

 char[] arr = str.ToCharArray(); arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-'))); str = new string(arr); 

当使用紧凑框架(它没有FindAll)

将FindAllreplace为1

 char[] arr = str.Where(c => (char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-')).ToArray(); str = new string(arr); 

1 评论来自ShawnFeatherly

你可以试试:

  string s1= Regex.Replace(s,"[^A-Za-z0-9 _]",""); 

哪里是你的string。

使用System.Linq

 string withOutSpecialCharacters = new string(stringWithSpecialCharacters.Where(c =>char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-').ToArray()); 

正则expression式是[^\w\s\-]*

\s最好使用而不是空格 ),因为文本中可能有一个标签。

基于这个问题的答案,我创build了一个静态类,并添加了这些。 认为这可能对某些人有用。

 public static class RegexConvert { public static string ToAlphaNumericOnly(this string input) { Regex rgx = new Regex("[^a-zA-Z0-9]"); return rgx.Replace(input, ""); } public static string ToAlphaOnly(this string input) { Regex rgx = new Regex("[^a-zA-Z]"); return rgx.Replace(input, ""); } public static string ToNumericOnly(this string input) { Regex rgx = new Regex("[^0-9]"); return rgx.Replace(input, ""); } } 

那么这些方法可以用作:

 string example = "asdf1234!@#$"; string alphanumeric = example.ToAlphaNumericOnly(); string alpha = example.ToAlphaOnly(); string numeric = example.ToNumericOnly(); 

我已经做了一个不同的解决scheme,通过消除控制字符,这是我原来的问题。

把所有的“特殊但是好”的字符列入清单总比是好的

 char[] arr = str.Where(c => !char.IsControl(c)).ToArray(); str = new string(arr); 

它更简单,所以我认为它更好!

想快点?

 public static class StringExtensions { public static string ToAlphaNumeric(this string self, params char[] allowedCharacters) { return new string(Array.FindAll(self.ToCharArray(), c => char.IsLetterOrDigit(c) || allowedCharacters.Contains(c))); } } 

这将允许你指定你想要允许的字符。

正则expression式有一个更简单的方法。

 private string FixString(string str) { return string.IsNullOrEmpty(str) ? str : Regex.Replace(str, "[\\D]", ""); } 

我在这里使用其中一个答案的变体。 我想用“ – ”replace空格,所以它的SEO友好,也使小写。 也没有从我的服务层引用system.web。

 private string MakeUrlString(string input) { var array = input.ToCharArray(); array = Array.FindAll<char>(array, c => char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-'); var newString = new string(array).Replace(" ", "-").ToLower(); return newString; }