簡體   English   中英

如何只從字符串數組中獲取數字?

[英]How to get only the numbers from a string array?

我有一個包含數字和單詞的字符串( items )數組 - 我從一個包含intstring值的字典( matches )中提取它。 我想得到一個數組或我可以循環的東西,它只包含數字,按數字排序,然后在控制台中顯示它們。

通過使用正則表達式,我可以很容易地為單個字符串執行此操作,但是當我有一個字符串數組時,我不知道該怎么做。

下面的代碼,見評論:

var matches = new Dictionary<int, string>();
matches.Add(1, "value1");
matches.Add(2, "value5");
matches.Add(3, "value2");
var items = matches.Values.ToArray();
Array.Sort(items, StringComparer.CurrentCulture);
Regex rgx = new Regex(@"\D");
rgx.Replace(items, ""); //This doesn't work with arrays!
int[] numbers = Array.ConvertAll(items, s => int.Parse(s)); //This doesn't work because my strings still contain letters
foreach (int c in numbers)
{
    Console.WriteLine(string.Format("Number is {0}", c));
    Console.ReadKey();
}

期望的輸出是:

Number is 1
Number is 5
Number is 2

如果不明顯,這些數字來自value1value5value2

您可以使用 LINQ 來完成。 該表達式非常具有聲明性且不言自明:

// we're searching for digits, not removing non-digits as in your example
Regex regex = new Regex(@"\d+");

var results = matches.Values
    .Select(v => regex.Match(v))     // do regex on each item
    .Where(m => m.Success)           // select only those results where regex worked
    .Select(m => int.Parse(m.Value)) // convert to int
    .ToList();                       // convert the results to a list - if you want to sort it

// you wanted to sort the list, right?
results.Sort();

foreach (int number in results)
{
    Console.WriteLine($"Number is {number}");
}

List<T>而不是 Array 來做這件事會讓事情變得更容易!

var matches = new Dictionary<int, string>();
matches.Add(1, "value1");
matches.Add(2, "value5");
matches.Add(3, "value2");

var items = matches.Values.ToList();
items.Sort( StringComparer.CurrentCulture);
Regex rgx = new Regex(@"\D");
var numbers = items.Select(i => int.Parse(rgx.Replace(i, "")));

foreach (int c in numbers)
{
    Console.WriteLine(string.Format($"Number is {c}"));
}

這是一個使用 Regex 的示例:

            string[] input = { "Number is 1", "Number is 5", "Number is 2" };
            string pattern = @"\d+";

            int[] results = input.Select(x => Regex.Match(x, pattern)).Cast<Match>().Select(x => int.Parse(x.Value)).ToArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM