用数字和单词切句

时间:2018-10-16 05:58:16

标签: c#

这是我的句子:

  

嗨123,它是564和678,所以让我们开始吧。

我需要用数字和单词来切成薄片:

[0] -> "Hi "
[1] -> "123"
[2] -> " it is a "
[3] -> "564"
[4] -> " and "
[5] -> "678"
[6] -> ", so let's work."

我试图用空格char分割它,并在数组的每个块中是否有数字时加入。但这不是一个好主意,并且要合并和拆分的代码太多。

即使使用Linq,还有什么简单的方法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式进行分割。

这是您需要的正则表达式:

(?<=\D)(?=\d)|(?<=\d)(?=\D)

它基本上是查找数字-非数字边界或非数字-数字边界。

using System.Text.RegularExpressions; // don't forget this using directive!

Regex.Split("Hi 123 it is a 564 and 678, so let's work.", @"(?<=\D)(?=\d)|(?<=\d)(?=\D)");

答案 1 :(得分:1)

尝试以下代码,它使用带有模式"IN"的正则表达式,这意味着一个或多个数字,然后按字符串将其拆分,以匹配该模式:

\d+

答案 2 :(得分:1)

您可以在下面使用代码。

        String full = "Hi 123 it is a 564 and 678, so let's work.";

        List<string> list = new List<string>();
        string buffer = "";
        bool number_seq = false;
        int number;

        for (int i = 0; i < full.Length; i++)
        {
            String single_char = full.Substring(i, 1);
            bool isNumber = int.TryParse(single_char, out number);
            if (isNumber)
            {
                if (!number_seq)
                {
                    list.Add(buffer);
                    buffer = "";
                    number_seq = true;
                }
            }else if (number_seq)
            {
                list.Add(buffer);
                buffer = "";
                number_seq = false;
            }
            buffer += single_char;
        }
        list.Add(buffer);