正则表达式是个强大的东西
暂时先记录一个用法:
QString str = "Peak memory: KEY s";
QString data = "Peak memory: 24.1 s";
需要构建一个可以匹配 data 的正则表达式,模板为 str ,其中KEY代表需要提取的数据。
PS: 需要注意的是 生成表达式中各种空格时候 \ 的用法,什么时候用一个,什么时候用2个或者4个,搞错了的话就不会进入if条件语句了。
#include <QApplication> #include <QtGui> #include <QLabel> #include <QString> #include <iostream> using namespace std; void generateReg(const QString &data, const QString &str) { Q_ASSERT(str != NULL && "Wrong input"); QString dst = str.trimmed(); // generate reg expression dst.replace(QRegExp("\s+"), "(?:\s+)"); dst.replace("KEY", "([1-9]+\.{,1}[0-9]*)"); //dst = "Peak memory:(?:\s+)([1-9]+\.{,1}[0-9]*)(?:\s+)s"; cout << "The reg pattern should be: " << "Peak memory:(?:\s+)([1-9]+\.{,1}[0-9]*)(?:\s+)s" << endl; cout << "The dst String: " << dst.toStdString() << endl; QRegExp rx(dst); int pos = data.indexOf(rx); if (pos > -1) { cout << endl << "RegExp worked:)" << endl; QStringList capedStr = rx.capturedTexts(); qDebug() << capedStr; } } int main(int argc, char *argv[]) { QApplication a(argc, argv); QString str = "Peak memory: KEY s"; QString data = "Peak memory: 241 s"; generateReg(data, str); return a.exec(); }
结果如下:
[突然想起有的地方代码可能看不到,还是贴着文本格式备用]
// 突然想起有可能看不了图片
#include <QApplication>
#include <QtGui>
#include <QLabel>
#include <QString>
#include <iostream>
using namespace std;
void generateReg(const QString &data, const QString &str)
{
Q_ASSERT(str != NULL && "Wrong input");
QString dst = str.trimmed();
// generate reg expression
dst.replace(QRegExp("\s+"), "(?:\s+)");
dst.replace("KEY", "([1-9]+\.{,1}[0-9]*)");
//dst = "Peak memory:(?:\s+)([1-9]+\.{,1}[0-9]*)(?:\s+)s";
cout << "The reg pattern should be: " << "Peak memory:(?:\s+)([1-9]+\.{,1}[0-9]*)(?:\s+)s" << endl;
cout << "The dst String: " << dst.toStdString() << endl;
QRegExp rx(dst);
int pos = data.indexOf(rx);
if (pos > -1)
{
cout << endl << "RegExp worked:)" << endl;
QStringList capedStr = rx.capturedTexts();
qDebug() << capedStr;
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString str = "Peak memory: KEY s";
QString data = "Peak memory: 241 s";
generateReg(data, str);
return a.exec();
}