【发布时间】:2019-04-29 03:18:05
【问题描述】:
我有一个需要解析的数据列表。 数据如下:
元素1 \t 可选元素2 \t 可选元素3 \r\n
元素(值)由 '\t' 分隔,OptionalElement2 和/或 OptionalElement3 可能出现也可能不出现。这意味着,我可以:
元素1 \t \t 可选元素3 \r\n
或
元素1 \t 可选元素2 \r\n
或
元素1 \r\n
我想在 C 或 C++ 语言中使用 sscanf 用正则表达式读取值,用
while (counter < 3) {
memset(buffer[counter], '\0', sizeof(buffer[counter]));
counter++;
}
sscanf(toParse, "%[^\t]%[^\t\r\n]%[^\t\r\n]\r\n", buffer[0], buffer[1], buffer[2])
但是当 OptionalElement2 为空时,buffer[1] 获取 OptionalElement3 的值而不是 '\0' 的数组。 有没有办法正确处理这个问题,这样当值不存在时,它们相应的容器也是空的?
谢谢。
【问题讨论】:
-
如果您只是想解析带有制表符分隔内容的字符串,您可能需要查看
strtok。您应该决定要使用哪种语言。对于 C++,可能有不同的解决方案。 -
sscanf不使用正则表达式。如果您完全使用sscanf,则必须始终检查其返回值。 -
感谢您的回复。然而,我不只是想解析这些值,因为每个值都需要处理。我会尝试 strtok 看看它是如何处理的。
-
melpomene,因为有 2 个案例的返回值完全相同,我认为获取找到的元素数量没有帮助。
-
melpomene,“sscanf 不使用正则表达式”?但我正在将此函数与正则表达式一起使用。