解析为数据串但省略引号

时间:2013-03-07 21:38:58

标签: regex regex-negation

我需要使用RegEx来运行一串文本,但只返回我需要的部分。比方说,字符串如下:

  1234,武器类型,100,手枪,“这是文本”和“,就是这样。”“”

\d*,Weapon Types,(\d*),(\w+),让我最重要的是,但这是我遇到问题的最后一部分。有没有办法让我捕获其余的字符串,即

  

“这是文字,”和“,就是这样。”“”

没有拿起报价?我试过否定它们,但它只是在引号上停止了字符串。

请记住,此字符串的文本未知,因此无法进行文字匹配。

1 个答案:

答案 0 :(得分:1)

你给了我们一些很难解决的东西。您可以在字符串中嵌套逗号。一旦我们遇到双引号,我们可以忽略所有内容,直到结束引用。这会让逗号变得粗糙。

但是你的解析器将如何知道下一个双引号不会结束字符串。它是如何知道它是嵌套的双引号?

如果我可以稍微修改你的输入字符串以明确什么是嵌套引用,那么解析很容易......

        var txt = "1234,Weapon Types,100,Handgun,\"This is the text, "and", that is all.\",other stuff";
        var m = Regex.Match(txt, @"^\d*,Weapon Types,(\d*),(\w+),""([^""]+)""");
        MessageBox.Show(m.Groups[3].Value);

但是如果您的输入字符串必须具有这样的嵌套引号,那么我们必须提出一些其他规则来检测字符串的真正结尾。怎么样?

        var txt = "1234,Weapon Types,100,Handgun,\"This is the text, \"and\", that is all.\",other stuff";
        var m = Regex.Match(txt, @"^\d*,Weapon Types,(\d*),(\w+),""(.+)"",");
        MessageBox.Show(m.Groups[3].Value);

结果是......

这是文字“和”,就是全部。