如何从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; }