您可以使用以下正则表达式来查找它:
"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.]+)"
假设您的文本保持不变并且您的数字始终采用这种形式(即是正数而不是指数形式),这应该捕获三个值。请注意,只有最后三个数字通过将括号括在它们周围来捕获。
如果你使用 boost 正则表达式,你可以这样做:
#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.
}
}
WhereinputTextString
包含您要解析的文本行,因此如果这来自文件,您可能希望将此代码放在一个循环中。该what
变量是所有匹配文本的向量,但what[0]
包含整行,因此可以忽略,除非您需要它。最后但并非最不重要的一点是,请记住双重转义“空格”字符类,否则编译器在将其呈现给正则表达式处理器之前已经对其进行了处理(或生成错误或警告)。另外,请注意我没有时间编译它,尽管它是基于工作代码的
注意输入文件中的尾随、前导空格,如果有帮助,请使用^
and$
分别标记行的开头或结尾。