如何从字符串中提取所有数字(如int)? c#
我有一个很长的字符串,我想通过它循环并按顺序取出所有的int值。这似乎很简单,但我似乎无法弄清楚。如何从字符串中提取所有数字(如int)? c#
string raw = "I am a string and I have some numbers 3 45 333 2 39 inside of me 1839 9303, and I'd like to get these numbers into 9 -10 00 9e09 into a string[] or something else";
int[] justNumbers = raw.?????
使用C#.NET 3.5并有权访问正则表达式和Linq(如有必要)。谢谢。
最终结果将是一长串整数。即
List<int> numbers = new List<int>();
WHAT我最终使用(不是最有效的,但保护正常工作)沿着线
#region mysolution
numbers = new List<int>();
foreach (char item in raw)
{
if (item.ToString() == "0")
{
numbers.Add(Convert.ToInt32(item.ToString()));
}
else if (item.ToString() == "1")
{
numbers.Add(Convert.ToInt32(item.ToString()));
}
else if (item.ToString() == "2")
{
numbers.Add(Convert.ToInt32(item.ToString()));
}
else if (item.ToString() == "3")
{
numbers.Add(Convert.ToInt32(item.ToString()));
}
else if (item.ToString() == "4")
{
numbers.Add(Convert.ToInt32(item.ToString()));
}
else if (item.ToString() == "5")
{
numbers.Add(Convert.ToInt32(item.ToString()));
}
else if (item.ToString() == "6")
{
numbers.Add(Convert.ToInt32(item.ToString()));
}
else if (item.ToString() == "7")
{
numbers.Add(Convert.ToInt32(item.ToString()));
}
else if (item.ToString() == "8")
{
numbers.Add(Convert.ToInt32(item.ToString()));
}
else if (item.ToString() == "9")
{
numbers.Add(Convert.ToInt32(item.ToString()));
}
}
#endregion
东西:(另)
var items = raw.Split(' ');
var integers = new List<int>();
foreach(var i in items){
int test = 0;
if(int.TryParse(i, out test)){
integers.add(test);
}
}
EDIT : 有一个overload of TryParse作为参数,其中包括ab依次比较System.Globalization.NumberStyles。有了这个过载,你可以指定它可以接受哪些类型的整数字符串(AllowExponent
就是其中之一),所以我想,还没有测试过这个,9e09
会工作。 :)
希望这有助于!
基于正则表达式的方法会是这个样子:
Regex number = new Regex(@"-?\d+");
List<int> ints = number.Matches(raw)
.Cast<Match>()
.Select(m => Int32.Parse(m.Value))
.ToList();
然而,这并没有如果的意思表示9×10^9处理9e09 - 这将它解释为两个不同号码,解析为9和9
我赞扬你的线数,但...这是一个复杂的技术的疯狂应用这个简单的问题 – 2010-02-10 21:38:54
可以通过将它改为\ de?\ d *来处理。 不确定哪个符号用于条件e,因为我习惯了Perl RegExp,但是?中的短语意思是0或1 – 2010-02-10 21:39:16
@Michael:有东西更好地建议? – 2010-02-10 21:39:52
“疯狂” 的LINQ方式:
private static IEnumerable<int> GetNumbers(string str)
{
foreach (var st in str.Split(new string[]{" "},StringSplitOptions.RemoveEmptyEntries)
.Where(s => (s.ToCharArray()
.All(c => Char.IsDigit(c)))))
{
yield return Convert.ToInt32(st);
}
}
疯狂+1 ;-) – 2010-02-10 21:48:17
如何:
int[] xx = raw.Split(' ').Where((s, o) => Int32.TryParse(s, out o)).Select(p => Int32.Parse(p)).ToArray();
针对itowlson,如果有人关心溢出,一方面也可以在这种情况下使用的TryParse有一个临时变量的帮助:
int tmp = 0;
var result = (from m in new Regex(@"-?\d+").Matches(s).OfType<Match>()
let doesParse = int.TryParse(m.Value, out tmp)
where doesParse
select tmp).ToList();
什么是最终结果预计将是什么样子? 3,45,333或3,4,5?或者是其他东西。需要更多细节。 – 2010-02-10 21:32:49