0

我需要使用 RegEx 来遍历一串文本,但只返回我需要的部分。例如,假设字符串如下:

1234,Weapon Types,100,Handgun,"这是正文,"和",仅此而已。"""

\d*,Weapon Types,(\d*),(\w+), 大部分时间都让我受益,但这是我遇到问题的最后一部分。有没有办法让我捕捉到字符串的其余部分,即

"这是文本,"和",仅此而已。"""

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

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

4

1 回答 1

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);

结果是……

这是文本,“和”,仅此而已。

于 2013-03-07T22:13:32.677 回答