0

各数値が空白で区切られている複数の数値を含む文字列を double 配列に変換しようとしています。

たとえば、元の文字列は次のようになります。

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); 

毎回正規表現を急ぐ必要はありません:)

于 2012-05-22T18:29:50.083 に答える
2

ここ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);
于 2012-05-22T18:22:18.887 に答える
1
Regex.Split(originalString, @"\s+").Where(s => !string.IsNullOrWhiteSpace(s))

は、null/空白が除外されたをWhere返します。IEnumerableそれでも配列として必要な場合は、.ToArray()その呼び出しチェーンに追加するだけです。

これを正しく一致させるには最低+1つ必要なので、キャラクターが必要です。

于 2012-05-22T18:23:07.907 に答える
1

String.Splitあなたが期待しているすべての空白文字を提供して、私は固執します。

正規表現では、 (および使用中のフレーバーに固有のその他の文字)\sと同等です。[ \t\r\n]これらを で表すことができます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 に答える