0

我正在尝试将包含多个数字的字符串(每个数字用空格分隔)转换为双精度数组。

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

originalString = "50 12.2 30 48.1"

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

[50
“”
12
“。”
2
“”
...]

任何帮助深表感谢。

4

5 回答 5

3

改用这个

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

无需每次都急于 RegEx :)

于 2012-05-22T18:29:50.083 回答
2

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

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

使用正则表达式的工作示例:

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

        foreach (string s in arr)
            Console.WriteLine(s);
于 2012-05-22T18:22:18.887 回答
1
Regex.Split(originalString, @"\s+").Where(s => !string.IsNullOrWhiteSpace(s))

Where返回一个IEnumerable过滤掉空值/空格的值。如果您仍然希望它作为一个数组,那么只需添加.ToArray()到该调用链中。

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

于 2012-05-22T18:23:07.907 回答
1

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

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

string[] nums = originalString.Split(
    new char[] { ' ', '\t', '\r', '\n' }, 
    StringSplitOptions.RemoveEmptyEntries);
于 2012-05-22T18:34:25.423 回答
1

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

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

originalString = "50 12.2 30 48.1";
string[] fields = originalString.Split(null as char[], StringSplitOptions.RemoveEmptyEntries);
于 2012-05-22T18:43:17.023 回答