在QString中找到一个数字

时间:2014-04-14 11:00:36

标签: c++ qt pattern-matching qstring

我有一个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();
}

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

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";
    }
}