yangzi8000 发表于 2023-5-6 15:16:57

QT怎么提取这些数据

QStringm="SSLL:000001.12 ZZLL:000006488152 QQT:-1234.4";
把里面的两个数据提取出来2个是浮点数一个整数,且数据长度是可变的

isdkz 发表于 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的格式保持相对一致。

yangzi8000 发表于 2023-5-6 15:35:11

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

高手啊

yangzi8000 发表于 2023-5-6 15:37:41

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

还有个问题 请教下,解析负数,表达式要加负号,但提前不知道正负的,怎么弄?

isdkz 发表于 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();
}


在这个示例中,我在每个数值前面加上了 -? ,这意味着负号是可选的。这样,正则表达式就可以匹配正数和负数了。其他部分保持不变。这个修改后的示例应该能处理负数和正数的情况。

yangzi8000 发表于 2023-5-6 15:46:41

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

非常感谢

isdkz 发表于 2023-5-6 15:48:09

yangzi8000 发表于 2023-5-6 15:46
非常感谢

给个最佳支持一下呗{:5_92:}

歌者文明清理员 发表于 2023-5-6 17:12:45

yangzi8000 发表于 2023-5-6 15:35
高手啊

他用的chat generative pre-trained transformer(ChatGPT)

yangzi8000 发表于 2023-5-6 17:40:42

歌者文明清理员 发表于 2023-5-6 17:12
他用的chat generative pre-trained transformer(ChatGPT)

用的哪个chatgpt ,我百度上找的不好用

歌者文明清理员 发表于 2023-5-6 17:42:31

本帖最后由 歌者文明清理员 于 2023-5-6 17:45 编辑

yangzi8000 发表于 2023-5-6 17:40
用的哪个chatgpt ,我百度上找的不好用

他用的一些付费工具(他说不方便在论坛说),直接访问 ai.com(gpt原站点)
我用的是 https://ai.wuguokai.cn 和 https://chat.jinshutuan.com
备选:https://chat.aidutu.cn 和 https://ai.usesless.com

isdkz 发表于 2023-5-6 17:45:23

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

???你这赤裸裸的诽谤呀,我什么时候让你不说出去?我只是说网络的问题不能随便在论坛聊

isdkz 发表于 2023-5-6 17:46:46

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

要不是我看了一下帖子就被你诋毁了,你个老6{:10_334:}

yangzi8000 发表于 2023-5-6 18:13:06

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

我靠靠,好用,哈哈 谢了,付了三个县大洋
页: [1]
查看完整版本: QT怎么提取这些数据