2013-03-07 57 views
0

我需要使用RegEx来运行一串文本,但只返回我需要的部分。比方说,例如字符串如下:“这是所有‘解析为数据字符串,但不包含引号

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

\d*,Weapon Types,(\d*),(\w+),得到我最大的方式,但它是我有问题的最后一部分。有我的方式来捕捉串即

其余“这是文本‘和’,仅此而已。”“”

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

请记住,这个字符串的文本是未知的,所以做文字匹配将无法正常工作。

+0

我不确定你是什么意思的“拾起引号”。你应该在你的问题中显示你想要你的程序提取的字符串。我想你已经显示了一些其他的字符串 - 对吗?此外,输入文本看起来非常像来自CSV文件的一行。如果是这样,为什么不使用专用的CSV解析器而不是正则表达式? – 2013-03-07 21:53:34

+0

几乎是CSV,除了嵌套逗号。见下面的答案。 – 2013-03-07 22:22:28

+0

对不起,对于字符串: 1234,武器类型,100,手枪,“这是正文”和“,就是这样”。“”“ 使用上面的正则表达式我想要结果是: 100,手枪,这是文字,就是这一切。 – 2013-03-08 00:58:58

回答

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

结果是...

这是文本 “和”,这是所有。

+0

谢谢你的回答,但是这并不是我正在寻找的东西,我很抱歉没有更清楚。最终的结果,我追求的是上面的字符串不带引号,即 1234,武器类型,100,手枪,“这是文本‘和’,仅此而已。”“” 变为 100,手枪,这是文字,就是这些。 所以基本上得到整个字符串,减去报价。我是RegEx的新手,所以我可能会要求它做的事情超过它的能力,但我想问问周围,看看这是否可能,以及如何做到这一点。 再次感谢您的时间。 – 2013-03-08 17:25:04

+0

我编辑了我的答案。我将括号移到了引号内,这样正则表达式只捕获内部字符串。 – 2013-03-09 03:18:27

相关问题