我正在尝试将包含多个数字的字符串转换为双数组,其中每个数字由空格分隔。
例如,原始字符串如下所示:
originalString = "50 12.2 30 48.1"
我一直在使用Regex.Split(originalString,@“\ s *”),但它返回的数组看起来像:
[50 "" 12 "." 2 "" ...]
非常感谢任何帮助。
答案 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);