繁体   English   中英

从字符串数组中提取数字

[英]Extract Number from string arrays

我有一个字符串数组,并且这些字符串包含不同类型的字符串,我想将这些值分成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查询?

您可以使用带有正则表达式的linq来解决此问题。

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

var first = arr.Where(v => Regex.IsMatch(v, @"^\d+$")).ToArray();
var second = arr.Where(v => Regex.IsMatch(v, @"^\d+-\d+-\d+$")).ToArray();

Console.WriteLine(string.Join(" ", first));
Console.WriteLine(string.Join(" ", second));

在此处输入图片说明

这是按照您描述的解决方案。 它不使用正则表达式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM