如何在QT c++中使用正则表达式从字符串中获得子字符串值

how to get sub string value from a string in QT C++ using regular expression

本文关键字:字符串 正则表达式 QT c++      更新时间:2023-10-16

我有一个字符串,例如:

QString输出;

Output="Duration: 00:01:25.65, start: 0.050000, bitrate: 2709 kb/s";

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

请注意,我对正则表达式没有很好的了解

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

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];
    [..]

您至少应该尝试读入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)应该rate.