Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#当用户输入标记化字符时,根据用户输入创建将被解析的字符串失败_C#_Json_Parsing - Fatal编程技术网

C#当用户输入标记化字符时,根据用户输入创建将被解析的字符串失败

C#当用户输入标记化字符时,根据用户输入创建将被解析的字符串失败,c#,json,parsing,C#,Json,Parsing,我知道发生了什么,但我试图使.Split()忽略某些字符 样本: 1|2|3|This is a string|type:1 “这是一个字符串”部分是用户输入,用户可以在拆分字符中输入,|在本例中,我想用\|来转义它。它似乎仍然基于此而分裂。这是在web上完成的,所以我认为一个聪明的举动可能实际上只是JSON.encode(user_in)来绕过它 1|2|3| This is \|a string|type:1 仍然在转义字符上拆分,因为我没有将其定义为特例。如何解决这个问题?您可以先用特

我知道发生了什么,但我试图使.Split()忽略某些字符

样本:

1|2|3|This is a string|type:1
“这是一个字符串”部分是用户输入,用户可以在拆分字符中输入,|在本例中,我想用\|来转义它。它似乎仍然基于此而分裂。这是在web上完成的,所以我认为一个聪明的举动可能实际上只是JSON.encode(user_in)来绕过它

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

仍然在转义字符上拆分,因为我没有将其定义为特例。如何解决这个问题?

您可以先用特殊的东西替换分隔符,然后将其拆分,最后将其替换回来

    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("@@@", @"\|"));
var initial=@“1 | 2 | 3 |这是一个字符串|类型:1”;
var modified=initial.Replace(@“\\\”,“@@@@@”);
IEnumerable result=modified.Split(“|”);
结果=结果。选择(i=>i.Replace(@@@@“,@“\\\”);

您可以先用特殊的东西替换分隔符,然后将其拆分,最后再将其替换回来

    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("@@@", @"\|"));
var initial=@“1 | 2 | 3 |这是一个字符串|类型:1”;
var modified=initial.Replace(@“\\\”,“@@@@@”);
IEnumerable result=modified.Split(“|”);
结果=结果。选择(i=>i.Replace(@@@@“,@“\\\”);

您可以改用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);
        }
/--regex for |前面没有\
字符串输入=@“1 | 2 | 3 |这是一个字符串\|类型:1”;

string pattern=@”(?您可以改用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);
        }
/--regex for |前面没有\
字符串输入=@“1 | 2 | 3 |这是一个字符串\|类型:1”;

string pattern=@“(?似乎
这是一个字符串
应该用引号括起来,就像
中的“这是一个字符串”
一样。这将使它能够与CSV解析器正常工作;唯一不起作用的用户输入是一个内部引号。似乎
这是一个字符串
应该用引号括起来,就像
“这是\|一个字符串”
。这将使它能够与CSV解析器正常工作;唯一不起作用的用户输入是一个内部引号。这当然假设输入字符串永远不会包含“@@@@”。这当然假设输入字符串永远不会包含“@@@@@”。因此,与javascript不同,使用类似于x.Split(”|)我会做一些类似于x.Split(/(\)|/)的事情;自从我用javascriptIm做了正则表达式以来,已经有一段时间了。我想看看我是否可以试试,看看这是否有效。如果你需要用javascript做这件事,这个问题/答案应该为你指明正确的方向:所以,不要用javascript做类似于x.Split(“|”)的事情我会做一些像x.Split(/(\)|/);自从我在JavaScription中使用正则表达式以来,已经有一段时间了。我将看看我是否可以尝试一下,看看这是否有效。如果您需要在javascript中执行此操作,此问题/答案将为您指明正确的方向: