[asp.net] 문자열에서 숫자가 아닌 문자 제거

ASP.NET C #에서 문자열에서 숫자가 아닌 문자를 제거하려는 Im 안녕하세요

즉 40,595 pa

40595로 끝날 것입니다

감사



답변

여러 가지 방법이 있지만 이렇게해야합니다 (정말 큰 문자열에서 어떻게 수행되는지 모르겠습니다).

private static string GetNumbers(string input)
{
    return new string(input.Where(c => char.IsDigit(c)).ToArray());
}


답변

정규 표현식에 잘 맞는 것 같습니다.

var s = "40,595 p.a.";
var stripped = Regex.Replace(s, "[^0-9]", "");

"[^0-9]"로 바꿀 수 @"\D"있지만 가독성이 마음에 듭니다 [^0-9].


답변

확장 방법이 더 나은 접근 방식입니다.

public static string GetNumbers(this string text)
    {
        text = text ?? string.Empty;
        return new string(text.Where(p => char.IsDigit(p)).ToArray());
    }


답변

0-9 만 캡처하고 나머지는 버리는 정규식을 사용하십시오. 정규식은 처음에는 많은 비용이 드는 작업입니다. 또는 다음과 같이하십시오.

var sb = new StringBuilder();
var goodChars = "0123456789".ToCharArray();
var input = "40,595";
foreach(var c in input)
{
  if(goodChars.IndexOf(c) >= 0)
    sb.Append(c);
}
var output = sb.ToString();

제가 생각하기에 그런 것 같지만 컴파일하지 않았습니다 ..

LINQ는 Fredrik이 말했듯이


답변

또 다른 옵션 …

private static string RemoveNonNumberDigitsAndCharacters(string text)
{
    var numericChars = "0123456789,.".ToCharArray();
    return new String(text.Where(c => numericChars.Any(n => n == c)).ToArray());
}


답변

음, 숫자가 0123456789입니다. 맞죠? 문자열을 문자 단위로 탐색하십시오. 문자가 숫자이면 임시 문자열 끝에 붙이고, 그렇지 않으면 무시하십시오. C # 문자열에 사용할 수있는 다른 도우미 메서드가있을 수 있지만 이는 모든 곳에서 작동하는 일반적인 접근 방식입니다.


답변

다음은 정규 표현식을 사용하는 코드입니다.

string str = "40,595 p.a.";

StringBuilder convert = new StringBuilder();

string pattern = @"\d+";
Regex regex = new Regex(pattern);

MatchCollection matches = regex.Matches(str);

foreach (Match match in matches)
{
convert.Append(match.Groups[0].ToString());
}

int value = Convert.ToInt32(convert.ToString());