0

何が起こっているのかはわかっていますが、.Split()が特定の文字を無視するようにしようとしていました。

サンプル:

1|2|3|This is a string|type:1

「これは文字列です」という部分はユーザー入力ですユーザーは分割文字を入力できます| この場合、\|でエスケープしたかったのです。それはまだそれに基づいて分裂しているようです。これはWebで行われているので、スマートな動きは実際にはそれを回避するためのJSON.encode(user_in)である可能性があると考えていましたか?

1|2|3| This is \|a string|type:1

特殊なケースとして定義しなかったため、エスケープ文字はまだ分割されています。この問題を回避するにはどうすればよいですか?

4

2 に答える 2

3

代わりにRegex.Splitを使用して、|で分割することができます。の前に。

        // -- regex for | not preceded by a \
        string input = @"1|2|3|This is a string\|type:1";
        string pattern = @"(?<!\\)[|]";
        string[] substrings = Regex.Split(input, pattern);

        foreach (string match in substrings)
        {
            Console.WriteLine("'{0}'", match);
        }
于 2012-08-23T18:10:33.440 に答える
0

区切り文字を最初に特別なものに置き換え、次に分割して、最後に元に戻すことができます。

    var initial = @"1|2|3|This is \| a string|type:1";
    var modified = initial.Replace(@"\|", "@@@");
    IEnumerable<string> result = modified.Split('|');
    result = result.Select(i => i.Replace("@@@", @"\|"));
于 2012-08-23T18:08:44.273 に答える