【发布时间】:2012-03-09 08:14:09
【问题描述】:
我正在尝试解析包含数字数据的文本文件。我有很多看起来像的线条
129.3 72.7 121.6 173.6 203.3 120.7 40.5 79.2 94.0 123.2 165.8 178.8 135.5 78.5 66.2
但线条的长度会有所不同。每行前面也有几个空格。 我想使用正则表达式来解析该行并将每个数字放入一个数组中,以便稍后进行操作。
使用
std::getline(is, line);
std::tr1::regex rx("[0-9-\.]+");
std::tr1::cmatch res;
std::tr1::regex_search(line.c_str(), res, rx);
只匹配第一个数字。相反,如果我使用线锚,例如
"^[0-9-\.]+$"
"^[0-9-\.]+"
我没有匹配到
"[0-9-\.]+$"
只匹配最后一个数字。所以我可能做错了什么。感谢您的帮助。
【问题讨论】:
-
res 是一个数组,即 res[1], res[2], res[3]... 应该有你的匹配项。你检查过还是刚刚获得资源?
-
regexp 在这里确实不是最好的解决方案,只是在浮点数中使用 operator>> 更容易使用,也更适合。
-
我同意 PlasmaHH,但谁知道出于什么原因,有人想玩正则表达式...
-
我检查了 res 的大小,它只包含一个元素。我会使用运算符>>,但每行的元素数量会发生变化,有些行有 15 个,其他行少了。
-
当然,但这是因为您的正则表达式不正确。
>>无疑是 C++ 的实现方式,但正则表达式提供了额外的灵活性。很高兴知道。