解析为数据字符串,但不包含引号
我需要使用RegEx来运行一串文本,但只返回我需要的部分。比方说,例如字符串如下:“这是所有‘解析为数据字符串,但不包含引号
1234,武器类型,100,手枪,’这是文本”和“”
\d*,Weapon Types,(\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);
结果是...
这是文本 “和”,这是所有。
谢谢你的回答,但是这并不是我正在寻找的东西,我很抱歉没有更清楚。最终的结果,我追求的是上面的字符串不带引号,即 1234,武器类型,100,手枪,“这是文本‘和’,仅此而已。”“” 变为 100,手枪,这是文字,就是这些。 所以基本上得到整个字符串,减去报价。我是RegEx的新手,所以我可能会要求它做的事情超过它的能力,但我想问问周围,看看这是否可能,以及如何做到这一点。 再次感谢您的时间。 – 2013-03-08 17:25:04
我编辑了我的答案。我将括号移到了引号内,这样正则表达式只捕获内部字符串。 – 2013-03-09 03:18:27
我不确定你是什么意思的“拾起引号”。你应该在你的问题中显示你想要你的程序提取的字符串。我想你已经显示了一些其他的字符串 - 对吗?此外,输入文本看起来非常像来自CSV文件的一行。如果是这样,为什么不使用专用的CSV解析器而不是正则表达式? – 2013-03-07 21:53:34
几乎是CSV,除了嵌套逗号。见下面的答案。 – 2013-03-07 22:22:28
对不起,对于字符串: 1234,武器类型,100,手枪,“这是正文”和“,就是这样”。“”“ 使用上面的正则表达式我想要结果是: 100,手枪,这是文字,就是这一切。 – 2013-03-08 00:58:58