একটি স্ট্রিং থেকে একটি সংখ্যা সন্ধান করুন এবং নিষ্কাশন করুন


319

আমার একটি স্ট্রিংয়ের মধ্যে থাকা একটি সংখ্যা খুঁজে বের করতে এবং খুঁজে বের করার প্রয়োজন রয়েছে।

উদাহরণস্বরূপ, এই স্ট্রিংগুলি থেকে:

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

কিভাবে আমি এটি করতে পারব?


2
সংখ্যাটি নেতিবাচক হতে পারে? যদি তা হয় তবে কীভাবে "হ্যালো - আপনি কেমন আছেন? -30" পরিচালনা করা হবে?
জন স্কিটি

হাই জন, তথ্য কোন ঋণাত্মক সংখ্যা
ভ্যান

4
দশমিক সংখ্যার মতো 1.5? ঘনিষ্ঠভাবে স্বরলিপি 1.5E45?
টিম পিটজেকার

একই (কিন্তু অভিন্ন): stackoverflow.com/questions/1561273/...
finnw

3
কেন এখানে কোন উত্তর গৃহীত হয় না?
উইক্টর স্ট্রিবিউউ

উত্তর:


63

স্ট্রিং এবং ব্যবহার মাধ্যমে যেতে 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);

15
@ থমাস: এই কোডটি কাজ করে না, এটির ফলাফল b == "System.Linq.Enumerable.."। সঠিক (এবং এমনকি আরও সহজ) হবেb = String.Join("", a.Where(char.IsDigit))
ব্লু রাজা - ড্যানি প্লে ফ্লুওফুট

1
ভাল পয়েন্ট, যে আমাকে মন্তব্য কোড লিখতে না পরীক্ষা করতে শেখাতে হবে! আপনি new string(char[])কনস্ট্রাক্টর ব্যবহার করে চর অ্যারে থেকে স্ট্রিংও তৈরি করতে পারেন ।
টমাস

1
রেজেক্স আরও অনেক ভাল কাজ করে।
জেসন কেলি

@ ব্লুরাজা - ড্যানি প্লাফুঘিফ্ট আপনার মন্তব্যকে কেন সঠিক উত্তর করবেন না যাতে আমি এটিতে ভোট দিতে পারি :-)
স্টিভসি

দ্রষ্টব্য: যদি স্ট্রিংটিতে একাধিক সংখ্যা থাকে তবে এই উত্তরটি তাদের একসাথে একক সংখ্যায় চালিত করবে। উদাহরণস্বরূপ "a12bcd345" এর ফলাফল "12345"। (যা লক্ষ্য অনুসারে কাঙ্ক্ষিত হতে পারে বা নাও হতে পারে top) এটি শীর্ষ-ভোট প্রাপ্ত রেজেক্স সমাধানের চেয়ে পৃথক, যা উপরের মামলার জন্য "12" প্রত্যাবর্তন করবে। "555-111-2222" ফোন নম্বরগুলির মতো ক্ষেত্রে এটি গুরুত্বপূর্ণ।
টুলমেকারস্টেভ

546

\d+একটি পূর্ণসংখ্যার সংখ্যার জন্য রেজেক্স। সুতরাং

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

এর মধ্যে একটি সংখ্যার প্রথম উপস্থিতিযুক্ত একটি স্ট্রিং প্রদান করে subjectString

Int32.Parse(resultString) তাহলে আপনাকে নম্বর দেবে


10
Regex.Match(subjectString, @"-?\d+").Valueপরিবর্তে আপনি ব্যবহার করতে পারেন এমন নেতিবাচক সংখ্যাগুলি সমর্থন করার জন্য
জন তালিকা

45
এই উত্তরটি সম্পূর্ণ নয় (সি # তে)। এটি স্ট্রিংয়ে কেবল প্রথম নম্বর পাচ্ছে। ম্যাচগুলিতে আপনাকে ইটারেট করতে হবে: রেজাল্ট স্ট্রিং = স্ট্রিং.জয়েন (স্ট্রিং.এম্পটি, রেজেেক্স. ম্যাচস (সাবজেক্ট স্ট্রিং, @ "\ ডি +")। অফ টাইপ <ম্যাচ> ()। নির্বাচন করুন (এম => মি। ভ্যালু));
মার্কাস

8
@ মারকাস: প্রশ্নটিতে "আমারে একটি স্ট্রিংয়ের মধ্যে থাকা একটি সংখ্যা বের করতে হবে" এবং সমস্ত উদাহরণ উদাহরণে স্ট্রিংয়ে উপস্থিত একটি একক সংখ্যা দেখায়। একক আইটেমের মাধ্যমে আইট্রেট করা কার্যকর নয়।
টিম পিটজ্যাকার

2
@ ইয়ামান: ওহ, কমা হাজার হাজার বিভাজক? এর জন্য আরও অনেক জটিল রেইজেক্স প্রয়োজন হবে - যা একটি পৃথক প্রশ্নে ডিল করা উচিত। একটি দুর্দান্ত প্রারম্ভিক বিন্দু হ'ল নিয়মিত- এক্সপ্রেসন.ইনফো যা। নেট এর রেজেক্স ইঞ্জিনের বিভাগগুলিও অন্তর্ভুক্ত করে।
টিম পিটজ্যাকার

5
@ ডেভিডসপকো: আপনি কী সম্পর্কে কথা বলছেন? মূল প্রশ্নটি শিরোনামে এবং প্রশ্নবস্তু উভয় ক্ষেত্রেই একটি স্ট্রিং থেকে একটি সংখ্যা বের করার জন্য একটি উপায় চেয়েছিল। মূল লেখক ব্যতীত অন্য ব্যক্তিদের প্রশ্নের উত্তর (আমার উত্তরের এক বছর পরে এবং পরে) শিরোনামটি "সংখ্যায়" পরিবর্তন করেছে। যদি কিছু হয় তবে সেই ত্রুটিযুক্ত সম্পাদনাটি আবার ঘুরিয়ে দেওয়া উচিত।
টিম পিটজ্যাকার

180

কেবলমাত্র অঙ্কগুলি পেতে আমি কীভাবে ফোন নম্বরগুলি পরিষ্কার করি:

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

31
string numericPhone =new String(phone.Where(Char.IsDigit).ToArray());
দামিথ

1
খুব মার্জিত সমাধান .. আমি লিনাকের ব্যবহার পছন্দ করি
লিও

1
পূর্ণসংখ্যার জন্য দুর্দান্ত সমাধান! আপনি যদি দশমিক সংখ্যাকে পার্স করার চেষ্টা করেন তবে এটি কাজ করবে না সে সম্পর্কে সচেতন হন কারণ দশমিক বিন্দু কোনও অঙ্ক নয়।
এলিয়াহ লোফগ্রেন

40

নিয়মিত অভিব্যক্তি ব্যবহার করুন ...

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

33

আমি কোনও বিরামচিহ্ন ছাড়াই ফোন নম্বর পেতে কী ব্যবহার করি ...

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

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

// result: 7877636511

18

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


16

এখানে একটি Linqসংস্করণ:

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

14
সহজভাবে কি "123iuow45ss".AsEnumerable().Where(char.IsDigit)?
ইলিয়া ইভানভ

2
আমি কেবল from t .. select tরিডানডেনসি পছন্দ করি না , তবে যাই হোক, চিয়ার্স।
ইলিয়া ইভানভ

13

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

12

আপনি এটি চেষ্টা করতে পারেন

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

সুন্দর তবে আপনার যদি মূল স্ট্রিংয়ের সংখ্যার মধ্যে ফাঁক থাকে তবে এটি আপনাকে দুটি বৃহত সংক্ষিপ্ত স্ট্রিং প্রদান করবে উভয় সংখ্যার সাথে যুক্ত (কোনও স্থান নেই)
মোহাম্মদ জেকরাল্লাহ

11

স্ট্রিংয়ের সাথে মেলে কেবল একটি রেজিএক্স ব্যবহার করুন, তারপরে রূপান্তর করুন:

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

9

এখানে আরও একটি 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

9

যারা চান তাদের জন্য দশমিক সঙ্গে একটি স্ট্রিং থেকে সংখ্যা Regex মধ্যে দুই লাইন:

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

একই জিনিস ভাসা , দীর্ঘ , ইত্যাদি ক্ষেত্রে প্রযোজ্য ...


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

1
এটি সেরা উত্তর যা আমাকে যা চেয়েছিল তা দিয়েছিল যা স্ট্রিংয়ের মধ্যে একাধিক সংখ্যার অ্যারে। কেবলমাত্র যদি এটি সংখ্যায় কমাগুলি উপেক্ষা করতে পারে (হাজার বিভাজক) তবে তা নিখুঁত হবে! :-)
সাগর

9

আপনি Stringনীচের মত সম্পত্তি ব্যবহার করে এটি করতে পারেন :

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

যা স্ট্রিং থেকে কেবল সংখ্যা দেয়।



7

প্রশ্নটি স্পষ্টভাবে জানায় না যে আপনি কেবল 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 () ব্যবহার করতে চান না - সংখ্যাগুলিতে ভগ্নাংশ, সাবস্ক্রিপ্টস, সুপারস্প্রিপ্টস, রোমান সংখ্যাসমূহ, মুদ্রার সংখ্যক, ঘের সংখ্যাগুলি এবং স্ক্রিপ্ট-নির্দিষ্ট অঙ্কের মতো অক্ষর অন্তর্ভুক্ত থাকে।


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

স্ট্রিংয়ে সমস্ত নম্বর পান। সুতরাং আপনি যদি এক্সপামেল '1 প্লাস 2' এর জন্য ব্যবহার করেন তবে এটি '12' পাবে।


5

স্ট্রিংয়ে থাকা সমস্ত ধনাত্মক সংখ্যা পেতে এক্সটেনশন পদ্ধতি :

    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]

5

যদি সংখ্যাটির দশমিক পয়েন্ট থাকে তবে আপনি নীচে ব্যবহার করতে পারেন

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

ফলাফল:

"কিছু 876.8 কিছু" ==> 876.8

"কিছু 876 কিছু" ==> 876

"$ 876435" ==> 876435

"$ 876.435" ==> 876.435

নমুনা: https://dotnetfiddle.net/IrtqVt


1
এই উত্তরের জন্য আপনাকে অনেক ধন্যবাদ। আমি সি # এবং ভিএস2017 ব্যবহার করছি এবং আমি কীভাবে মানটি পাই তা নির্ধারণ করার চেষ্টা করছিলাম। আপনার উত্তরের জন্য আপনাকে আবার ধন্যবাদ।
বুদবুদ

3

এই প্রশ্নের উত্তরের যে কোনও একটিটির বিপরীতটি ঘটেছে: রিজেক্স.রেপ্লেস ব্যবহার করে স্ট্রিং থেকে নম্বরগুলি কীভাবে সরিয়ে নেওয়া যায়?

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

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

এই কোডটি স্ট্রিংয়ের মধ্যে সমস্ত সংখ্যার মান সন্ধান করতে ব্যবহৃত হয়।
মনোজ গুপ্ত

মন্তব্য হিসাবে আলাদাভাবে পোস্ট করার চেয়ে উত্তরে সরাসরি কিছু বর্ণনা যুক্ত করা ভাল। মন্তব্যগুলি সর্বদা তাত্ক্ষণিকভাবে দৃশ্যমান হয় না।
জন ডিভোরাক

2

আহমাদ ম্যাগেদ এখানে একটি আকর্ষণীয় পন্থা সরবরাহ করেছেন, রেখাটি এবং স্ট্রিংবিল্ডারটি স্ট্রিংয়ের সাথে ক্রম হিসাবে পূর্ণ সংখ্যার ক্রমটি বের করতে ব্যবহার করে।

আহমাদ মাজেদ পোস্টের উপর ভিত্তি করে রেগেক্স.স্প্লিট ব্যবহার করার উদাহরণ নিম্নরূপ:

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

2

এই যে আমার অ্যালগরিদম

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

1

এখানে আমার সমাধান

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

0

আপনি হিসাবে হিসাবে Regex ব্যবহার করতে হবে \d+

\d প্রদত্ত স্ট্রিংয়ের সাথে অঙ্কগুলি মেলে।


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

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


-3

সর্বশেষ নমুনার ভিত্তিতে আমি একটি পদ্ধতি তৈরি করেছি:

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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.