我有点惊讶的是网上没有关于此的信息,我一直发现这个问题比我想象的要有点棘手.
这是规则:
您将从分隔/转义数据开始拆分为数组.
分隔符是一个任意字符
转义字符是一个任意字符
分隔符和转义字符都可能出现在数据中
正则表达式很好,但性能最好的解决方案是最好的
编辑:可以忽略空元素(包括前导或结束分隔符)
代码签名(基本上是C#)
public static string[] smartSplit( string delimitedData, char delimiter, char escape) {}
问题中最棘手的部分是转义的连续转义字符大小写,当然,因为(调用/转义字符和分隔符):////////,= ////,
我错过了某个地方,这是在网上还是在另一个SO问题上处理的?如果没有,那就把你的大脑投入工作......我认为这个问题对于公益事业来说是件好事.我自己正在研究它,但还没有一个好的解决方案.
简单的状态机通常是最简单,最快捷的方式.Python中的示例:
def extract(input, delim, escape): # states parsing = 0 escaped = 1 state = parsing found = [] parsed = "" for c in input: if state == parsing: if c == delim: found.append(parsed) parsed = "" elif c == escape: state = escaped else: parsed += c else: # state == escaped parsed += c state = parsing if parsed: found.append(parsed) return found
void smartSplit(string const& text, char delim, char esc, vector& tokens) { enum State { NORMAL, IN_ESC }; State state = NORMAL; string frag; for (size_t i = 0; i