我需要使用RegEx来运行一串文本,但只返回我需要的部分。比方说,字符串如下:
1234,武器类型,100,手枪,“这是文本”和“,就是这样。”“”
\d*,Weapon Types,(\d*),(\w+),
让我最重要的是,但这是我遇到问题的最后一部分。有没有办法让我捕获其余的字符串,即
“这是文字,”和“,就是这样。”“”
没有拿起报价?我试过否定它们,但它只是在引号上停止了字符串。
请记住,此字符串的文本未知,因此无法进行文字匹配。
答案 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);
结果是......
这是文字“和”,就是全部。