Regex.Split返回的字符串的对齐方式

时间:2015-03-16 17:39:41

标签: c# .net regex

我一直试图根据非转义引号所包含的区域以及两个这样的子串之间的区域来拆分字符串。

我用过

var parts = Regex.Split(value, "(\"(?:((\\\\\\\\)*\\\\\\\")|[^\"])*\")");

现在假设值为

"\"abc\", \"a\\\"b\\\"c\""

部分包含

""
"\"abc\""
", "
"\"a\\\"b\\\"c\""
"\\\""
""

我无法弄清楚为什么第五根弦就在那里。其内容仅存在于第四个字符串的内容中。我使用正则表达式错了吗?字符串的起源是什么?

3 个答案:

答案 0 :(得分:0)

我不完全确定你的尝试是什么,但我相信它如下:

    var content = "\"abc\", \"a\\\"b\\\"c\"";
    var filter = Regex.Split(content, @"(?<=[,\s]\"")(.*?)(?=\"")");
    foreach(var item in filter)
        Console.WriteLine(item);

输出如下:

  • “abc”,“
  • 一个\
  • “B \” C“

这应该忽略你的逃避,但抓住报价中的项目,即使是你已经注意到的嵌套。

希望这有帮助。

答案 1 :(得分:0)

var content = "\"abc\", \"a\\\"b\\\"c\"";
var spltContent = content.Split(new[] {@"\\\"}, StringSplitOptions.RemoveEmptyEntries);

这将是你的出局 "\"abc\", \"a\\\"b\\\"c\""

答案 2 :(得分:0)

根据StringSplitOptions "Remarks" section

  

String.Split方法返回给定字符串中由指定字符或字符串分隔的子字符串数组。相邻的分隔符产生一个包含空字符串(“”)的数组元素。 StringSplitOptions枚举的值指定返回的数组中是否包含包含空字符串的数组元素。

至于解决这个问题,MethodMan有正确的想法:将StringSplitOptions.RemoveEmptyEntries参数传递给Split()以删除这些条目。