鱼C论坛

 找回密码
 立即注册
查看: 715|回复: 12

[已解决]QT怎么提取这些数据

[复制链接]
发表于 2023-5-6 15:16:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
QString  m="SSLL:000001.12 ZZLL:000006488152 QQT:-1234.4";
把里面的两个数据提取出来  2个是浮点数  一个整数,且数据长度是可变的
最佳答案
2023-5-6 15:42:55
yangzi8000 发表于 2023-5-6 15:37
还有个问题 请教下,解析负数,表达式要加负号,但提前不知道正负的,怎么弄?

当你不知道数值是正数还是负数时,可以通过在正则表达式中加入一个可选的负号来匹配。这是更新后的正则表达式和示例:
#include <QCoreApplication>
#include <QRegularExpression>
#include <QString>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString m = "SSLL:000001.12 ZZLL:000006488152 QQT:-1234.4";

    // 定义正则表达式,其中负号是可选的
    QRegularExpression re(R"((?<=SSLL:)(-?[\d.]+)\s+(?=ZZLL:)(-?\d+)\s+(?=QQT:)(-?[\d.]+))");
    QRegularExpressionMatch match = re.match(m);

    if (match.hasMatch()) {
        double floatValue1 = match.captured(1).toDouble(); // 提取第一个浮点数
        int intValue = match.captured(2).toInt();          // 提取整数
        double floatValue2 = match.captured(3).toDouble(); // 提取第二个浮点数

        qDebug() << "First float value:" << floatValue1;
        qDebug() << "Integer value:" << intValue;
        qDebug() << "Second float value:" << floatValue2;
    } else {
        qDebug() << "No match found!";
    }

    return a.exec();
}

在这个示例中,我在每个数值前面加上了 -? ,这意味着负号是可选的。这样,正则表达式就可以匹配正数和负数了。其他部分保持不变。这个修改后的示例应该能处理负数和正数的情况。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-6 15:21:36 | 显示全部楼层
为了从这个QString中提取两个浮点数和一个整数,你可以使用Qt的QRegularExpression类。首先,你需要包含QRegularExpression的头文件。然后,可以使用正则表达式从QString中提取所需的数据。以下是一个简单的示例:
#include <QCoreApplication>
#include <QRegularExpression>
#include <QString>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString m = "SSLL:000001.12 ZZLL:000006488152 QQT:-1234.4";

    // 定义正则表达式
    QRegularExpression re(R"((?<=SSLL:)([\d.]+)\s+(?=ZZLL:)(\d+)\s+(?=QQT:)([-\d.]+))");
    QRegularExpressionMatch match = re.match(m);

    if (match.hasMatch()) {
        double floatValue1 = match.captured(1).toDouble(); // 提取第一个浮点数
        int intValue = match.captured(2).toInt();          // 提取整数
        double floatValue2 = match.captured(3).toDouble(); // 提取第二个浮点数

        qDebug() << "First float value:" << floatValue1;
        qDebug() << "Integer value:" << intValue;
        qDebug() << "Second float value:" << floatValue2;
    } else {
        qDebug() << "No match found!";
    }

    return a.exec();
}

在这个示例中,正则表达式首先匹配字符串中的"SSLL:",然后捕获后面的浮点数。接着,它匹配"ZZLL:",然后捕获后面的整数。最后,它匹配"QQT:",然后捕获后面的浮点数。一旦正则表达式匹配成功,我们将捕获的数据转换为相应的数据类型(浮点数或整数)并打印到控制台。

这个示例应该适用于你的问题,只要QString的格式保持相对一致。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-6 15:35:11 | 显示全部楼层
isdkz 发表于 2023-5-6 15:21
为了从这个QString中提取两个浮点数和一个整数,你可以使用Qt的QRegularExpression类。首先,你需要包含QRe ...

高手啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-6 15:37:41 | 显示全部楼层
isdkz 发表于 2023-5-6 15:21
为了从这个QString中提取两个浮点数和一个整数,你可以使用Qt的QRegularExpression类。首先,你需要包含QRe ...

还有个问题 请教下,解析负数,表达式要加负号,但提前不知道正负的,怎么弄?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-6 15:42:55 | 显示全部楼层    本楼为最佳答案   
yangzi8000 发表于 2023-5-6 15:37
还有个问题 请教下,解析负数,表达式要加负号,但提前不知道正负的,怎么弄?

当你不知道数值是正数还是负数时,可以通过在正则表达式中加入一个可选的负号来匹配。这是更新后的正则表达式和示例:
#include <QCoreApplication>
#include <QRegularExpression>
#include <QString>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString m = "SSLL:000001.12 ZZLL:000006488152 QQT:-1234.4";

    // 定义正则表达式,其中负号是可选的
    QRegularExpression re(R"((?<=SSLL:)(-?[\d.]+)\s+(?=ZZLL:)(-?\d+)\s+(?=QQT:)(-?[\d.]+))");
    QRegularExpressionMatch match = re.match(m);

    if (match.hasMatch()) {
        double floatValue1 = match.captured(1).toDouble(); // 提取第一个浮点数
        int intValue = match.captured(2).toInt();          // 提取整数
        double floatValue2 = match.captured(3).toDouble(); // 提取第二个浮点数

        qDebug() << "First float value:" << floatValue1;
        qDebug() << "Integer value:" << intValue;
        qDebug() << "Second float value:" << floatValue2;
    } else {
        qDebug() << "No match found!";
    }

    return a.exec();
}

在这个示例中,我在每个数值前面加上了 -? ,这意味着负号是可选的。这样,正则表达式就可以匹配正数和负数了。其他部分保持不变。这个修改后的示例应该能处理负数和正数的情况。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-6 15:46:41 | 显示全部楼层
isdkz 发表于 2023-5-6 15:42
当你不知道数值是正数还是负数时,可以通过在正则表达式中加入一个可选的负号来匹配。这是更新后的正则表 ...

非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-6 15:48:09 | 显示全部楼层

给个最佳支持一下呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-6 17:12:45 | 显示全部楼层

他用的chat generative pre-trained transformer(ChatGPT)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-6 17:40:42 | 显示全部楼层
歌者文明清理员 发表于 2023-5-6 17:12
他用的chat generative pre-trained transformer(ChatGPT)

用的哪个chatgpt ,我百度上找的不好用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-6 17:42:31 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-5-6 17:45 编辑
yangzi8000 发表于 2023-5-6 17:40
用的哪个chatgpt ,我百度上找的不好用


他用的一些付费工具(他说不方便在论坛说),直接访问 ai.com(gpt原站点)
我用的是 https://ai.wuguokai.cnhttps://chat.jinshutuan.com
备选:https://chat.aidutu.cnhttps://ai.usesless.com
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-6 17:45:23 | 显示全部楼层
歌者文明清理员 发表于 2023-5-6 17:42
他用的一些付费工具(他之前跟我私聊,让我不说出去),直接访问 ai.com(gpt原站点)
我用的是 https:/ ...


???你这赤裸裸的诽谤呀,我什么时候让你不说出去?我只是说网络的问题不能随便在论坛聊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-6 17:46:46 | 显示全部楼层
歌者文明清理员 发表于 2023-5-6 17:42
他用的一些付费工具(他说不方便在论坛说),直接访问 ai.com(gpt原站点)
我用的是 https://ai.wugu ...

要不是我看了一下帖子就被你诋毁了,你个老6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-6 18:13:06 | 显示全部楼层
歌者文明清理员 发表于 2023-5-6 17:42
他用的一些付费工具(他说不方便在论坛说),直接访问 ai.com(gpt原站点)
我用的是 https://ai.wugu ...

我靠靠  ,好用,哈哈 谢了,付了三个县大洋
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 13:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表