从字符串数组中提取数字

时间:2019-09-06 01:28:02

标签: c# .net linq lambda

我有一个字符串数组,其中包含不同类型的字符串,我想将这些值分成2个不同的数组。

string[] arr = { "12" , "34-2-2" , "xyz" , "33" , "56-3-4" , "45-4" }

现在我想要linq查询,它在一个数组中给我“ 12”,“ 33”,在另一个数组中给我“ 34-2-2”,“ 56-3-4”。其余的值将被忽略。

var _cust= DbContext.Customer.AsQueryable();

这将包含Id(Int32),在此我要添加查询,如果客户的值为“ 12”,则返回该查询,“ 33”将返回该结果。

var _cont = DbContext.Contacts.AsQueryable();

这将包含DisplayId(字符串),并且在此我想添加查询,如果客户具有“ 34-2-2”,则返回该查询,“ 56-3-4”将返回该结果。

如何为此编写linq查询?

2 个答案:

答案 0 :(得分:1)

您可以非常简单地将linq与正则表达式配合使用来解决此问题...

.bat

enter image description here

答案 1 :(得分:0)

以下是您所描述的解决方案。它不使用正则表达式。

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp3
{
    class Program
    {
        static readonly char[] digits = "0123456789".ToCharArray();
        static void Main(string[] args)
        {
            string[] arr = { "12", "34-2-2", "xyz", "33", "56-3-4", "45-4" };
            var pair = ProcessInput(arr);
            Console.WriteLine(String.Join(", ", pair.Item1));
            Console.WriteLine(String.Join(", ", pair.Item2));
            var done = Console.ReadLine();
        }
        static Tuple<string[], string[]> ProcessInput(string[] input)
        {
            var l1 = new List<string>();
            var l2 = new List<string>();   
            foreach(var item in input)
            {
                if (ContainsOnlyIntegers(item))
                {
                    l1.Add(item);
                    continue; // move on.
                }
                var parts = item.Split('-');
                if (parts.Length == 3 && parts.All(part => ContainsOnlyIntegers(part)))
                {
                    //must have 3 parts, separated by hypens and they are all numbers.                    
                    l2.Add(item);
                }
            }
            return Tuple.Create(l1.ToArray(), l2.ToArray());
        }

        static bool ContainsOnlyIntegers(string input)
        {
            return input.ToCharArray().All(r => digits.Contains(r));
        }
    }
}
相关问题