[C#] 대시를 제외한 문자열에서 영숫자가 아닌 문자를 모두 제거하려면 어떻게합니까?

대시 및 공백 문자를 제외한 문자열에서 영숫자가 아닌 문자를 모두 제거하려면 어떻게합니까?



답변

[^a-zA-Z0-9 -]빈 문자열로 교체하십시오 .

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


답변

RegEx를 사용할 수 있었지만 우아한 솔루션을 제공 할 수는 있지만 성능 문제가 발생할 수 있습니다. 여기에 하나의 해결책이 있습니다.

char[] arr = str.ToCharArray();

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

컴팩트 프레임 워크 (FindAll이없는)를 사용하는 경우

FindAll을 1로 교체

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

str = new string(arr);

ShawnFeatherly의 댓글 1


답변

당신은 시도 할 수 있습니다:

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

s당신의 줄은 어디에 있습니까 ?


답변

System.Linq 사용

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


답변

정규식은 [^\w\s\-]*다음과 같습니다.

\s텍스트에 탭이있을 수 있으므로 공백 ( ) 대신 사용하는 것이 좋습니다 .


답변

이 질문에 대한 답변을 바탕으로 정적 클래스를 만들고 추가했습니다. 일부 사람들에게는 유용 할 것이라고 생각했습니다.

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


답변

빠른 것을 원하십니까?

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

이를 통해 허용하려는 문자를 지정할 수 있습니다.