如何在QT c++中使用正则表达式从字符串中获得子字符串值
how to get sub string value from a string in QT C++ using regular expression
我有一个字符串,例如:
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.
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 如何在C++中使用正则表达式"|"后选择字符串?
- 如何在 c++11 中使用正则表达式找到确切的子字符串?
- 如何编写将验证以下字符串的正则表达式?
- C++带有捕获组的正则表达式字符串文本
- 如何使用正则表达式从字符串中提取值
- 使用正则表达式c++从单词和分隔符之间的字符串中提取所有子字符串
- 如何在没有外部库的情况下使用C++03约束执行基于正则表达式的字符串操作
- 需要忽略日期/序列号,但匹配字符串其余部分的正则表达式
- 如何将正则表达式向量与一个字符串匹配?
- 正则表达式匹配字符串之间的数字
- 如何根据某个索引将字符串与正则表达式匹配?
- 如何从字符串变量为正则表达式构建原始字符串
- C++ 中用于搜索字符串模式的正则表达式
- C++无符号字符串类型的正则表达式
- 如何使用正则表达式将输入数字格式化为字符串
- 使用具有特殊字符的正则表达式标记 C++ 字符串
- C 11正则表达式和字符串U8前缀
- 正则表达式:从模式字符串 1.string2'string3 中提取字符串,其中字符串 1 可以包含 '." 字符
- 在字符串正则表达式c++中查找模式