正则表达式是个强大的东西
暂时先记录一个用法:
QString str = "Peak memory: KEY s";
QString data = "Peak memory: 24.1 s";
需要构建一个可以匹配 data 的正则表达式,模板为 str ,其中KEY代表需要提取的数据。
PS: 需要注意的是 生成表达式中各种空格时候 \\ 的用法,什么时候用一个,什么时候用2个或者4个,搞错了的话就不会进入if条件语句了。
#include#include #include #include #include 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();
}