Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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
Regex 解析为数据字符串,但不带引号_Regex_Regex Negation - Fatal编程技术网

Regex 解析为数据字符串,但不带引号

Regex 解析为数据字符串,但不带引号,regex,regex-negation,Regex,Regex Negation,我需要使用正则表达式来运行文本字符串,但只返回我需要的部分。例如,假设字符串如下所示: 1234,武器类型,100,手枪,“这是文本”,还有“就这些” \d*、武器类型、(\d*)、(\w+)、让我了解了大部分情况,但这是我遇到问题的最后一部分。是否有一种方法可以让我捕获字符串的其余部分,即 这是文本,“还有”,就这些 不接受报价?我尝试过否定它们,但是它只是在引号处停止字符串 请记住,此字符串的文本未知,因此进行文字匹配将不起作用。您给了我们一些很难解决的问题。可以在字符串中嵌套逗号。一旦我们

我需要使用正则表达式来运行文本字符串,但只返回我需要的部分。例如,假设字符串如下所示:

1234,武器类型,100,手枪,“这是文本”,还有“就这些”

\d*、武器类型、(\d*)、(\w+)、
让我了解了大部分情况,但这是我遇到问题的最后一部分。是否有一种方法可以让我捕获字符串的其余部分,即

这是文本,“还有”,就这些

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


请记住,此字符串的文本未知,因此进行文字匹配将不起作用。

您给了我们一些很难解决的问题。可以在字符串中嵌套逗号。一旦我们遇到双重报价,我们可以忽略一切,直到结束报价。这会弄错逗号

但是解析器如何知道下一个双引号不是字符串的结尾呢。它如何知道它是嵌套的双引号

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

        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);
结果是


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

我不确定你所说的“摘引”是什么意思。您应该在问题中显示希望程序提取的字符串。我想你展示了一些其他的字符串,对吗?此外,输入文本看起来非常像CSV文件中的一行。如果是这样,为什么不使用专用的CSV解析器而不是正则表达式呢?几乎是CSV,只是有嵌套的逗号。请参阅下面的答案。更具体地说,很抱歉,对于字符串:1234,武器类型,100,手枪,“这是文本”和“这就是全部。”“使用上面的正则表达式,我希望结果是:100,手枪,这是文本,这就是全部。谢谢你的回答,但这不是我想要的,我很抱歉没有说得更清楚。我寻找的最终结果是上面没有引号的字符串,即1234,武器类型,100,手枪,“这是文本”和“就是全部”。“变成100,手枪,这是文本,就是全部。所以基本上得到整个字符串,减去引号。我是新加入RegEx的,所以我可能会要求它做的比它能做的更多,但我想问问周围,看看这是否可行,以及如何做到。再次感谢您抽出时间。我编辑了我的答案。我将括号移到引号内,以便正则表达式只捕获内部字符串。