मुझे एक स्ट्रिंग के भीतर निहित संख्या को खोजने और निकालने की आवश्यकता है।
उदाहरण के लिए, इन तारों से:
string test = "1 test"
string test1 = " 1 test"
string test2 = "test 99"
मैं यह कैसे कर सकता हूँ?
1.5
? घातीय संकेतन की तरह 1.5E45
?
मुझे एक स्ट्रिंग के भीतर निहित संख्या को खोजने और निकालने की आवश्यकता है।
उदाहरण के लिए, इन तारों से:
string test = "1 test"
string test1 = " 1 test"
string test2 = "test 99"
मैं यह कैसे कर सकता हूँ?
1.5
? घातीय संकेतन की तरह 1.5E45
?
जवाबों:
स्ट्रिंग और उपयोग के माध्यम से जाओ 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);
b == "System.Linq.Enumerable.."
। सही (और यहां तक कि सरल) होगाb = String.Join("", a.Where(char.IsDigit))
new string(char[])
कंस्ट्रक्टर का उपयोग करके चार सरणी से एक स्ट्रिंग भी बना सकते हैं ।
\d+
पूर्णांक संख्या के लिए regex है। इसलिए
//System.Text.RegularExpressions.Regex
resultString = Regex.Match(subjectString, @"\d+").Value;
में एक संख्या की पहली घटना युक्त एक स्ट्रिंग देता है subjectString
।
Int32.Parse(resultString)
फिर आपको नंबर देगा।
Regex.Match(subjectString, @"-?\d+").Value
इसके बजाय इस्तेमाल कर सकते हैं
यहां बताया गया है कि मैं केवल अंक प्राप्त करने के लिए फ़ोन नंबर कैसे साफ़ करता हूं:
string numericPhone = new String(phone.Where(Char.IsDigit).ToArray());
string numericPhone =new String(phone.Where(Char.IsDigit).ToArray());
नियमित अभिव्यक्ति का उपयोग करें ...
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!");
}
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);
}
}
आउटपुट:
संख्या: ४ संख्या: ४० संख्या: ३० संख्या: १०
यहाँ एक Linq
संस्करण है:
string s = "123iuow45ss";
var getNumbers = (from t in s
where char.IsDigit(t)
select t).ToArray();
Console.WriteLine(new string(getNumbers));
"123iuow45ss".AsEnumerable().Where(char.IsDigit)
?
from t .. select t
अतिरेक पसंद नहीं है , लेकिन फिर भी, चीयर्स।
रेगेक्स का उपयोग करते हुए एक और सरल समाधान आपको इसका उपयोग करने की आवश्यकता होनी चाहिए
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]"));
स्ट्रिंग का मिलान करने के लिए एक RegEx का उपयोग करें, फिर कनवर्ट करें:
Match match = Regex.Match(test , @"(\d+)");
if (match.Success) {
return int.Parse(match.Groups[1].Value);
}
यहां एक और 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
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());
जो स्ट्रिंग से केवल नंबर देता है।
var match=Regex.Match(@"a99b",@"\d+");
if(match.Success)
{
int val;
if(int.TryParse(match.Value,out val))
{
//val is set
}
}
यह प्रश्न स्पष्ट रूप से नहीं बताता है कि आप केवल वर्ण 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 () का उपयोग क्यों नहीं करना चाहते हैं - संख्याओं में अंश, सदस्यता, सुपरस्क्रिप्ट, रोमन अंक, मुद्रा संख्या, घेरे गए नंबर और स्क्रिप्ट-विशिष्ट अंक जैसे वर्ण शामिल हैं।
एक्सटेंशन पद्धति एक स्ट्रिंग में निहित सभी सकारात्मक संख्याएँ प्राप्त करने के लिए :
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]
यदि संख्या में दशमलव अंक हैं, तो आप नीचे उपयोग कर सकते हैं
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
क्या इस प्रश्न के उत्तरों में से एक का उल्टा हुआ: Regex.Replace का उपयोग करके स्ट्रिंग से संख्या कैसे निकालें?
// 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);
string verificationCode ="dmdsnjds5344gfgk65585";
string code = "";
Regex r1 = new Regex("\\d+");
Match m1 = r1.Match(verificationCode);
while (m1.Success)
{
code += m1.Value;
m1 = m1.NextMatch();
}
अहमद माजिद द्वारा यहां एक दिलचस्प दृष्टिकोण प्रदान किया गया है, जिसमें वे स्ट्रिंग में दिखाई देते हैं, पूर्णांक निकालने के लिए रेगेक्स और स्ट्रिंगर का उपयोग करते हैं।
अहमद मजीद द्वारा पोस्ट के आधार पर 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);
यहाँ मेरा समाधान है
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
दिए गए स्ट्रिंग में अंकों से मेल खाता है।
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 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"));
पिछले नमूने के आधार पर मैंने एक विधि बनाई:
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;
}