6

文字列の分割について質問があります。文字列を分割したいのですが、文字列の場合はchars ""を参照してください。分割せず、空のスペースを削除してください。

私の文字列:

String tmp = "abc 123 \"Edk k3\" String;";

結果:

1: abc
2: 123
3: Edkk3  // don't split after "" and remove empty spaces
4: String

結果のコードですが、「」の空のスペースを削除する方法がわかりません

var tmpList = tmp.Split(new[] { '"' }).SelectMany((s, i) =>
                {
                    if (i % 2 == 1) return new[] { s };
                    return s.Split(new[] { ' ', ';' }, StringSplitOptions.RemoveEmptyEntries);
                }).ToList();

または、これには「」が表示されないため、すべてが分割されます

string[] tmpList = tmp.Split(new Char[] { ' ', ';', '\"', ',' }, StringSplitOptions.RemoveEmptyEntries);
4

3 に答える 3

8

.Replace(" ","") を追加

String tmp = @"abc 123 ""Edk k3"" String;";
var tmpList = tmp.Split(new[] { '"' }).SelectMany((s, i) =>
{
    if (i % 2 == 1) return new[] { s.Replace(" ", "") };
    return s.Split(new[] { ' ', ';' }, StringSplitOptions.RemoveEmptyEntries);
}).ToList();
于 2012-11-30T13:16:00.257 に答える
0

正規表現を使用できます。分割する代わりに、保持するものを指定します。

例:

string tmp = "abc 123 \"Edk k3\" String;";

MatchCollection m = Regex.Matches(tmp, @"""(.*?)""|([^ ]+)");

foreach (Match s in m) {
  Console.WriteLine(s.Groups[1].Value.Replace(" ", "") + s.Groups[2].Value);
}

出力:

abc
123
Edkk3
String;
于 2012-11-30T13:24:01.233 に答える
0

string.Splitの内容を無視するように指示できないため、やりたいことには適していません"

Regexこれは複雑になり、メモリを大量に消費する可能性があるため(長い文字列の場合)、どちらも使用しません。

独自のパーサーを実装します - ステート マシンを使用して、引用部分内にいるかどうかを追跡します。

于 2012-11-30T13:16:36.157 に答える