我已经看到了很多非常接近我需要的正则表达式答案,但它并不完全存在。问题是我有一个字符串需要在字符上拆分(例如:空格或'='),但我想忽略引号内的任何内容(甚至引号内的引号)。
我能得到的最接近的是:
" (?=(?:[^"]*"[^"]*")*[^"]*$)"
效果很好,有两个警告:引号中的时间间隔不正确会触发错误的拆分,并且会向后读取。我并不真正关心的第一个问题,我无能为力,我可以解决它。但第二个很关键。
情况是,有时我正在正则表达式的字符串可能会不小心遗漏最后的引号。这并没有真正打扰我的系统,但上面的正则表达式倒退了,所以它破坏了一切:
string test = "foo bar \"foo bar\" foobar \"foo"
var result = Regex.Split(test, " (?=(?:[^"]*"[^"]*")*[^"]*$)");
这将使:
foo bar "foo
bar" foobar "foo
因为它从最后开始并向后运行过滤器。我需要的结果是:
foo
bar
"foo bar"
foobar
"foo
我知道 $ 负责从头到尾的事情,但我无法为我的生活弄清楚如何扭转它。想法?