各数値が空白で区切られている複数の数値を含む文字列を double 配列に変換しようとしています。
たとえば、元の文字列は次のようになります。
originalString = "50 12.2 30 48.1"
私は Regex.Split(originalString, @"\s*") を使用してきましたが、次のような配列を返しています:
[50 "" 12 「。」 2 "" ...]
どんな助けでも大歓迎です。
代わりにこれを使用する
originalString.Split(new char[]{'\t', '\n', ' ', '\r'}, StringSplitOptions.RemoveEmptyEntries);
毎回正規表現を急ぐ必要はありません:)
ここstring[] myArray = originalString.Split(' ');
に正規表現の必要性がないと思います。
本当に正規表現を使用したい場合は、の\s+
代わりにパターンを使用してください\s*
。は*
ゼロ以上を意味しますが、1つ以上のスペース文字で分割する必要があります。
正規表現を使用した作業例:
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))
は、null/空白が除外されたをWhere
返します。IEnumerable
それでも配列として必要な場合は、.ToArray()
その呼び出しチェーンに追加するだけです。
これを正しく一致させるには最低+
1つ必要なので、キャラクターが必要です。
String.Split
あなたが期待しているすべての空白文字を提供して、私は固執します。
正規表現では、 (および使用中のフレーバーに固有のその他の文字)\s
と同等です。[ \t\r\n]
これらを で表すことができます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);