我正在尝试将包含多个数字的字符串(每个数字用空格分隔)转换为双精度数组。
例如,原始字符串如下所示:
originalString = "50 12.2 30 48.1"
我一直在使用 Regex.Split(originalString, @"\s*"),但它返回的数组看起来像:
[50 “” 12 “。” 2 “” ...]
任何帮助深表感谢。
改用这个
originalString.Split(new char[]{'\t', '\n', ' ', '\r'}, StringSplitOptions.RemoveEmptyEntries);
无需每次都急于 RegEx :)
怎么样,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);
Regex.Split(originalString, @"\s+").Where(s => !string.IsNullOrWhiteSpace(s))
Where
返回一个IEnumerable
过滤掉空值/空格的值。如果您仍然希望它作为一个数组,那么只需添加.ToArray()
到该调用链中。
该+
字符是必需的,因为您需要一个MINIMUM才能使其正确匹配。
我会坚持String.Split
,提供您期望的所有空白字符。
在正则表达式中,\s
等价于[ \t\r\n]
(加上一些其他特定于使用风格的字符);我们可以通过 a 来表示这些char[]
:
string[] nums = originalString.Split(
new char[] { ' ', '\t', '\r', '\n' },
StringSplitOptions.RemoveEmptyEntries);
如果您null
作为分隔符传递给,则默认行为String.Split
是在空格上拆分。IsWhiteSpace
这包括与 Unicode测试匹配的任何内容。在表示制表符、换行符、垂直制表符、换页符、回车符和空格的 ASCII 范围内。
RemoveEmptyEntries
您也可以通过传递选项来避免空字段。
originalString = "50 12.2 30 48.1";
string[] fields = originalString.Split(null as char[], StringSplitOptions.RemoveEmptyEntries);