您可以使用下面的正则表达式来寻找它:
"Input_Device_Name\s+GTape\s+Buffer_Size\s+[0-9.]+\s+Acquisition_Event_Rate\s+([0-9.]+)\s+Acquisition_Buffer_Rate\s+([0-9.]+)\s+Acquisition_Succes_Rate\s+([0-9.]+)"
这应该抓住三个值假设你的文字保持不变,并且您的号码始终采取这种形式(即是积极的,而不是在指数形式)。请注意,只有最后三个数字是通过将括号括起来捕获的。
如果使用正则表达式的提振,你可以做这样的事情:
#include <boost/regex.hpp>
...
boost::smatch what;
static const boost::regex pp("Input_Device_Name\\s+GTape\s+Buffer_Size\\s+[0-9.]+\\s+Acquisition_Event_Rate\\s+([0-9.]+)\\s+Acquisition_Buffer_Rate\\s+([0-9.]+)\\s+Acquisition_Succes_Rate\\s+([0-9.]+)");
if (boost::regex_match(inputTextString, what, pp))
{
if (what.size() == 4)
{
double d1 = strtod(static_cast<const string&>(what[1]).c_str(), NULL, 0);
double d2 = strtod(static_cast<const string&>(what[2]).c_str(), NULL, 0);
double d3 = strtod(static_cast<const string&>(what[3]).c_str(), NULL, 0);
// These are your doubles, do some stuff with them.
}
}
哪里inputTextString
包含要解析的文本行,所以如果这是来自一个文件说,你会想把这个代码放在一个循环中。 what
变量是所有匹配文本的向量,尽管what[0]
包含整行,因此可以忽略,除非您需要它。最后但并非最不重要的一点是,请记住将“空格”字符类加倍转义,否则在呈现给正则表达式处理器之前,它已经被编译器处理(或生成错误或警告)。另外请注意,我没有时间编译它,虽然它是基于工作代码
请注意输入文件的尾部空白,并使用^
和$
标记开头或结尾如果有帮助的话。
阐明您需要的属性。为什么这个令牌 - 因为浮点值? – triclosan 2012-07-11 09:47:12
事实上,我不关心浮点值。如果我只得到[int]部分就没关系。 – eouti 2012-07-11 09:48:55