c# - 한글 - 문자열 중 숫자




문자열에서 숫자 찾기 및 추출 (18)

문자열 내에 포함 된 숫자를 찾아서 추출해야한다는 요구 사항이 있습니다.

예를 들어, 다음 문자열에서 :

string test = "1 test"
string test1 = " 1 test"
string test2 = "test 99"

어떻게해야합니까?


Ahmad Mageed가 제공하는 흥미로운 접근 방법은 Regex와 stringbuilder를 사용하여 문자열에 나타나는 순서대로 정수를 추출하는 것입니다.

Ahmad Mageed가 게시 한 Regex.Split을 사용한 예제는 다음과 같습니다.

var dateText = "MARCH-14-Tue";
string splitPattern = @"[^\d]";
string[] result = Regex.Split(dateText, splitPattern);
var finalresult = string.Join("", result.Where(e => !String.IsNullOrEmpty(e)));
int DayDateInt = 0;

int.TryParse(finalresult, out DayDateInt);

RegEx를 사용하여 문자열을 일치시킨 다음 변환하십시오.

Match match = Regex.Match(test , @"(\d+)");
if (match.Success) {
   return int.Parse(match.Groups[1].Value);
}

Regex를 사용하는 또 다른 간단한 솔루션 당신은 이것을 사용해야 할 것입니다.

using System.Text.RegularExpressions;

코드는

string var = "Hello3453232wor705Ld";
string mystr = Regex.Replace(var, @"\d", "");
string mynumber = Regex.Replace(var, @"\D", "");
Console.WriteLine(mystr);
Console.WriteLine(mynumber);

나는 구두점없이 전화 번호를 얻기 위해 무엇을 사용합니까?

var phone = "(787) 763-6511";

string.Join("", phone.ToCharArray().Where(Char.IsDigit));

// result: 7877636511

다음은 Linq 버전입니다.

string s = "123iuow45ss";
var getNumbers = (from t in s
                  where char.IsDigit(t)
                  select t).ToArray();
Console.WriteLine(new string(getNumbers));

다음은 문자열에서 첫 번째 숫자를 추출하는 또 다른 Linq 방식입니다.

string input = "123 foo 456";
int result = 0;
bool success = int.TryParse(new string(input
                     .SkipWhile(x => !char.IsDigit(x))
                     .TakeWhile(x => char.IsDigit(x))
                     .ToArray()), out result);

예 :

string input = "123 foo 456"; // 123
string input = "foo 456";     // 456
string input = "123 foo";     // 123

마지막 샘플을 기반으로 메소드를 만들었습니다.

    private string GetNumberFromString(string sLongString, int iLimitNumbers)
    {
        string sReturn = "NA";
        int iNumbersCounter = 0;
        int iCharCounter = 0; 

        string sAlphaChars = string.Empty;
        string sNumbers = string.Empty;
        foreach (char str in sLongString)
        {
            if (char.IsDigit(str))
            {
                sNumbers += str.ToString();
                iNumbersCounter++;
                if (iNumbersCounter == iLimitNumbers)
                {
                    return sReturn = sNumbers;
                }
            }
            else
            {
                sAlphaChars += str.ToString();
                iCharCounter++;
                // reset the counter 
                iNumbersCounter = 0; 
            }
        }
        return sReturn;
    }

문자열에 포함 된 모든 양수 를 가져 오는 확장 메서드입니다.

    public static List<long> Numbers(this string str)
    {
        var nums = new List<long>();
        var start = -1;
        for (int i = 0; i < str.Length; i++)
        {
            if (start < 0 && Char.IsDigit(str[i]))
            {
                start = i;
            }
            else if (start >= 0 && !Char.IsDigit(str[i]))
            {
                nums.Add(long.Parse(str.Substring(start, i - start)));
                start = -1;
            }
        }
        if (start >= 0)
            nums.Add(long.Parse(str.Substring(start, str.Length - start)));
        return nums;
    }

음수를 원하면이 코드를 수정하여 빼기 기호 ( - )를 처리하면됩니다.

주어진이 입력 :

"I was born in 1989, 27 years ago from now (2016)"

결과 숫자 목록은 다음과 같습니다.

[1989, 27, 2016]

여기 내 알고리즘이있다.

    //compatible C# and JAVA
    public static int GetNumber(string Text)
    {
        int val = 0;
        for(int i = 0; i < Text.Length; i++)
        {
            char c = Text[i];
            if (c >= '0' && c <= '9')
            {
                val *= 10;
                //(ASCII code reference)
                val += c - 48;
            }
        }
        return val;
    }

여기 내 해결책이있다.

string var = "Hello345wor705Ld";
string alpha = string.Empty;
string numer = string.Empty;
foreach (char str in var)
{
    if (char.IsDigit(str))
        numer += str.ToString();
    else
        alpha += str.ToString();
}
Console.WriteLine("String is: " + alpha);
Console.WriteLine("Numeric character is: " + numer);
Console.Read();

이것을 시도 할 수도 있습니다.

string.Join(null,System.Text.RegularExpressions.Regex.Split(expr, "[^\\d]"));

자들이 2 진수Regex 로 문자열에서 10 진수 를 원한다면 :

decimal result = 0;
decimal.TryParse(Regex.Match(s, @"\d+").Value, out result);

같은 일이 부유물 , 길게 등등에 적용됩니다 ...


정규식을 사용하십시오 ...

Regex re = new Regex(@"\d+");
Match m = re.Match("test 66");

if (m.Success)
{
    Console.WriteLine(string.Format("RegEx found " + m.Value + " at position " + m.Index.ToString()));
}
else
{
    Console.WriteLine("You didn't enter a string containing a number!");
}

질문은 명시 적으로 0에서 9까지의 문자를 원한다고 명시하지는 않지만 예제 세트 및 주석에서 진실이라고 믿을 수는 없습니다. 그래서 여기에 그 코드가 있습니다.

        string digitsOnly = String.Empty;
        foreach (char c in s)
        {
            // Do not use IsDigit as it will include more than the characters 0 through to 9
            if (c >= '0' && c <= '9') digitsOnly += c;
        }

Char.IsDigit ()를 사용하지 않으려는 이유 - 숫자에는 분수, 아래 첨자, 위 첨자, 로마 숫자, 통화 분자, 원과 숫자 및 스크립트 별 숫자가 포함됩니다.


  string verificationCode ="dmdsnjds5344gfgk65585";
            string code = "";
            Regex r1 = new Regex("\\d+");
          Match m1 = r1.Match(verificationCode);
           while (m1.Success)
            {
                code += m1.Value;
                m1 = m1.NextMatch();
            }

 string input = "Hello 20, I am 30 and he is 40";
 var numbers = Regex.Matches(input, @"\d+").OfType<Match>().Select(m => int.Parse(m.Value)).ToArray();

string s = "kg g L000145.50\r\n";
        char theCharacter = '.';
        var getNumbers = (from t in s
                          where char.IsDigit(t) || t.Equals(theCharacter)
                          select t).ToArray();
        var _str = string.Empty;
        foreach (var item in getNumbers)
        {
            _str += item.ToString();
        }
        double _dou = Convert.ToDouble(_str);
        MessageBox.Show(_dou.ToString("#,##0.00"));

var match=Regex.Match(@"a99b",@"\d+");
if(match.Success)
{
    int val;
    if(int.TryParse(match.Value,out val))
    {
        //val is set
    }
}




string