如何使用正则表达式从QT C ++中的字符串中获取子字符串值

时间:2014-07-08 06:41:29

标签: c++ regex qt

我有一个字符串,例如:

QString输出;

输出=“持续时间:00:01:25.65,开始:0.050000,比特率:2709 kb / s”`;

我的问题是如何分别获取这些持续时间,开始值和比特率值 例如,我需要获得比特率值,那么如何使用正则表达式获取c ++中的比特率值。

请注意,我对正则表达式并不了解。

2 个答案:

答案 0 :(得分:1)

以防万一 - 不使用正则表达式的解决方案:

enum Data {
    Duration,
    Start,
    Bitrate
};

int main(int argc, char *argv[])
{
    [..]
    QString str("Duration: 00:01:25.65, start: 0.050000, bitrate: 2709 kb/s");

    QStringList tokens = str.split(',');
    QString duration = tokens[Duration].split(' ', QString::SkipEmptyParts)[1];
    QString start = tokens[Start].split(' ', QString::SkipEmptyParts)[1];
    QString bitrate = tokens[Bitrate].split(' ', QString::SkipEmptyParts)[1];
    [..]

答案 1 :(得分:0)

您至少应该尝试阅读QRegExp。有一些例子。使用reg表达式,您可以使用捕获组QRegExp("Duration:\\s*(\\d{2}:\\d{2}:\\d{2}.\\d{2})"),例如匹配持续时间或QRegExp("start:\\s*(\\d+\\.\\d+),"),以便在捕获组中启动。如果字符串始终具有此设置,则很容易过滤。

现在由您来找到比特率

编辑:

QString Output;
Output="Duration: 00:01:25.65, start: 0.050000, bitrate: 2709 kb/s";
QRegExp rx = QRegExp("Duration:\\s*(\\d{2}:\\d{2}:\\d{2}.\\d{2}),\\s*start:\\s*(\\d+\\.\\d+),\\s*bitrate:\\s*(\\d*)\\s*kb/s");

rx.indexIn(Output);
QStringList qsl = rx.capturedTexts();

for(int i=0; i<qsl.count(); i++)
{
    qDebug()<<"Da Data Thing: "<< i << " Da Value Thing: " << qsl.at(i);
}

qsl.at(1)应该是持续时间。

qsl.at(2)应该开始。

qsl.at(3)应该是费率。