在QString中查找一个数字

Find a number inside a QString

本文关键字:一个 数字 QString 查找      更新时间:2023-10-16

我有一个QString,里面有一些数字,例如

first_34.33string
second-23.4string // In this case number is negative

如何从字符串中提取数字?

编辑:

这个函数似乎可以工作,在回复中使用regexp:

float getNumberFromQString(const QString &xString)
{
  QRegExp xRegExp("(-?\d+(?:[\.,]\d+(?:e\d+)?)?)");
  xRegExp.indexIn(xString);
  QStringList xList = xRegExp.capturedTexts();
  if (true == xList.empty())
  {
    return 0.0;
  }  
  return xList.begin()->toFloat();
}

这应该适用于有效数字:QRegExp("(-?\d+(?:[\.,]\d+(?:e\d+)?)?)")

编辑:对不起,括号搞砸了,现在应该可以用了。

我会为此编写一个简单的函数:

static double extractDouble(const QString &s)
{
    QString num;
    foreach(QChar c, s) {
        if (c.isDigit() || c == '.' || c == '-') {
            num.append(c);
        }
    }
    bool ok;
    double ret = num.toDouble(&ok);
    if (ok) {
        return ret;
    } else {
        throw "Cannot extract double value";
    }
}