正则表达式+将由空格分隔的数字行转换为数组

时间:2012-05-22 18:19:45

标签: c# regex

我正在尝试将包含多个数字的字符串转换为双数组,其中每个数字由空格分隔。

例如,原始字符串如下所示:

originalString = "50 12.2 30 48.1"

我一直在使用Regex.Split(originalString,@“\ s *”),但它返回的数组看起来像:

[50
""
12
"."
2
""
...]

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:3)

改为使用

originalString.Split(new char[]{'\t', '\n', ' ', '\r'}, StringSplitOptions.RemoveEmptyEntries); 

无需每次都赶紧使用RegEx:)

答案 1 :(得分:2)

string[] myArray = originalString.Split(' ');怎么样 我不认为这里需要RegEx ..

如果您确实想使用RegEx,请使用模式\s+而不是\s**表示零或更多,但您希望拆分一个或多个空格字符。

使用RegEx的工作示例:

        string originalString = "50   12.2   30 48.1";
        string[] arr = Regex.Split(originalString, @"\s+");

        foreach (string s in arr)
            Console.WriteLine(s);

答案 2 :(得分:1)

Regex.Split(originalString, @"\s+").Where(s => !string.IsNullOrWhiteSpace(s))

Where返回IEnumerable,过滤掉空/空格。如果你想将它作为一个数组,那么只需将.ToArray()添加到该调用链。

+字符是必需的,因为您需要一个 MINIMUM 才能使其成为正确匹配。

答案 3 :(得分:1)

我会坚持使用String.Split,提供您期望的所有空白字符。

在正则表达式中,\s相当于[ \t\r\n](加上一些特定于使用中的风格的其他字符);我们可以通过char[]

来表示这些内容
string[] nums = originalString.Split(
    new char[] { ' ', '\t', '\r', '\n' }, 
    StringSplitOptions.RemoveEmptyEntries);

答案 4 :(得分:1)

如果将null作为分隔符传递给String.Split,则默认行为是在空格上拆分。这包括与Unicode IsWhiteSpace测试匹配的任何内容。在ASCII范围内,表示制表符,换行符,垂直制表符,换页符,回车符和空格。

此外,您可以通过传递RemoveEmptyEntries选项来避免空字段。

originalString = "50 12.2 30 48.1";
string[] fields = originalString.Split(null as char[], StringSplitOptions.RemoveEmptyEntries);