programing

문자열에서 숫자 찾기 및 추출

newstyles 2023. 4. 24. 22:57

문자열에서 숫자 찾기 및 추출

문자열에 포함된 번호를 찾아서 추출해야 합니다.

예를 들어, 다음 문자열에서 다음과 같이 입력합니다.

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

이거 어떻게 해?

\d+는 정수의 정규식입니다.그렇게

//System.Text.RegularExpressions.Regex
resultString = Regex.Match(subjectString, @"\d+").Value;

에서 처음 발생한 번호를 포함하는 문자열을 반환합니다.subjectString.

Int32.Parse(resultString)그러면 번호를 알려드리겠습니다.

번호만 취득하기 위해 전화번호를 클리어하는 방법은 다음과 같습니다.

string numericPhone = new String(phone.Where(Char.IsDigit).ToArray());

그 끈을 조사하여 사용하다Char.IsDigit

string a = "str123";
string b = string.Empty;
int val;

for (int i=0; i< a.Length; i++)
{
    if (Char.IsDigit(a[i]))
        b += a[i];
}

if (b.Length>0)
    val = int.Parse(b);

정규 표현을 사용하다

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

구두점 없이 전화번호 받기 위해 사용하는 것...

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

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

// result: 7877636511

Regex.Split은 문자열에서 숫자를 추출할 수 있습니다.문자열에 있는 모든 숫자를 얻을 수 있습니다.

string input = "There are 4 numbers in this string: 40, 30, and 10.";
// Split on one or more non-digit characters.
string[] numbers = Regex.Split(input, @"\D+");
foreach (string value in numbers)
{
    if (!string.IsNullOrEmpty(value))
    {
    int i = int.Parse(value);
    Console.WriteLine("Number: {0}", i);
    }
}

출력:

번호: 4 번호: 40 번호: 30 번호: 10

숫자에 소수점이 있으면 아래를 사용할 수 있습니다.

using System;
using System.Text.RegularExpressions;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Your code goes here
            Console.WriteLine(Regex.Match("anything 876.8 anything", @"\d+\.*\d*").Value);
            Console.WriteLine(Regex.Match("anything 876 anything", @"\d+\.*\d*").Value);
            Console.WriteLine(Regex.Match("$876435", @"\d+\.*\d*").Value);
            Console.WriteLine(Regex.Match("$876.435", @"\d+\.*\d*").Value);
        }
    }
}

결과:

"any 876.8 anything" ==> 876.8

"any 876 anything" ==> 876

"876435달러" ==> 876435

"876.435달러" ==> 876.435

샘플 : https://dotnetfiddle.net/IrtqVt

여기 있습니다.Linq버전:

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

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

이것도 시도해 보세요.

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

여기 또 있다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

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

Match match = Regex.Match(test , @"(\d+)");
if (match.Success) {
   return int.Parse(match.Groups[1].Value);
}
 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다음과 같은 속성:

 return new String(input.Where(Char.IsDigit).ToArray()); 

문자열의 숫자만 표시합니다.

정규식을 2행으로 하는 문자열에서 10진수를 요구하는 경우:

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

플로트, 에도 같은 것이 적용됩니다.

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

여기 또 다른 간단한 솔루션이 있습니다.Linq문자열에서 숫자 값만 추출합니다.

var numbers = string.Concat(stringInput.Where(char.IsNumber));

예:

var numbers = string.Concat("(787) 763-6511".Where(char.IsNumber));

제공 내용: "787763511"

이 질문에는 단순히 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() - 숫자에는 분수, 첨자, 위첨자, 로마 숫자, 통화 분자, 동그라미 숫자, 스크립트 고유의 숫자 등의 문자가 포함됩니다.

var outputString = String.Join("", inputString.Where(Char.IsDigit));

문자열의 모든 번호를 가져옵니다.그래서 시험 '1+2'를 사용하면 '12'가 됩니다.

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

    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]

Ahmad Mageed에 의해 여기서 제공되는 흥미로운 접근법은 Regex와StringBuilder문자열에 표시되는 순서대로 정수를 추출합니다.

「 」를 한 예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);

이 원라이너로 모든 번호를 뽑아냈습니다.

var phoneNumber = "(555)123-4567";
var numsOnly = string.Join("", new Regex("[0-9]").Matches(phoneNumber)); // 5551234567
  string verificationCode ="dmdsnjds5344gfgk65585";
            string code = "";
            Regex r1 = new Regex("\\d+");
          Match m1 = r1.Match(verificationCode);
           while (m1.Success)
            {
                code += m1.Value;
                m1 = m1.NextMatch();
            }

이 질문에 대한 답변 중 하나를 반대로 했습니까?정규식을 사용하여 문자열에서 숫자를 삭제하는 방법.교환하시겠습니까?

// Pull out only the numbers from the string using LINQ

var numbersFromString = new String(input.Where(x => x >= '0' && x <= '9').ToArray());

var numericVal = Int32.Parse(numbersFromString);

여기 알고리즘이 있습니다.

    //Fast, C Language friendly
    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;
    }
static string GetdigitFromString(string str)
    {
        char[] refArray = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        char[] inputArray = str.ToCharArray();
        string ext = string.Empty;
        foreach (char item in inputArray)
        {
            if (refArray.Contains(item))
            {
                ext += item.ToString();
            }
        }
        return ext;
    }

이것이 나의 해결책이다.

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

를 Regex로 .\d+

\d는 지정된 문자열의 숫자와 일치합니다.

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

에서 @tim-pietzcker 답변을 사용하면 다음과 같이 처리됩니다.PowerShell.

PS C:\> $str = '1 test'
PS C:\> [regex]::match($str,'\d+').value
1

언급URL : https://stackoverflow.com/questions/4734116/find-and-extract-a-number-from-a-string