如何从字符串中删除非字母数字字符(包括空格)?

时间:2012-01-08 16:34:36

标签: c# asp.net .net regex

如何从字符串中删除非字母数字字符并在C#中使用Replace替换空格?

我想保留a-z,A-Z,0-9等等(甚至不是“”空格)。

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

应该给出

"Hellotherehello"

我尝试了"Hello there(hello#)".Replace(@"[^A-Za-z0-9 ]", "");,但空格仍然存在。

8 个答案:

答案 0 :(得分:59)

在正则表达式中,您已将空格排除在匹配之外(并且您没有使用我完全忽略的Regex.Replace() ...):

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

应该有效。 +通过一次匹配多个连续的非字母数字字符而不是逐个匹配,使正则表达式更有效。

如果您还想保留非ASCII字母/数字,请使用以下正则表达式:

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

离开

BonjourmesélèvesGutenMorgenliebeSchüler

而不是

BonjourmeslvesGutenMorgenliebeSchler

答案 1 :(得分:15)

您可以使用 Linq 过滤掉所需的字符:

  String source = "Hello there(hello#)";

  // "Hellotherehello"
  String result = new String(source
    .Where(ch => Char.IsLetterOrDigit(ch))
    .ToArray());

或者

  String result = String.Concat(source
    .Where(ch => Char.IsLetterOrDigit(ch)));  

所以你不需要正则表达式

答案 2 :(得分:3)

或者你也可以这样做:

    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();
    }

用法:

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

//text: textLaLalol123

答案 3 :(得分:2)

上面的错误是错误地使用了Replace(它不使用正则表达式,感谢CodeInChaos)。

以下代码应该执行指定的操作:

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

这给出了:

regexed = "Hellotherehello"

答案 4 :(得分:2)

作为替换操作作为扩展方法:

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();
    } 
}

并测试:

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

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:-2)

使用以下正则表达式使用Regex.Replace

从字符串中删除所有字符
([^A-Za-z0-9\s])

答案 7 :(得分:-6)

在.Net 4.0中,您可以使用String类的IsNullOrWhitespace方法删除所谓的空格字符。请看这里http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx 然而,正如@CodeInChaos指出的那样,有很多字符可以被视为字母和数字。如果您只想查找A-Za-z0-9,则可以使用正则表达式。