0

我只是想从用户字符串中提取两个数字。我有正则表达式工作,但第二个数字捕获不够贪婪!我不知道如何根据我的需要重新格式化它,我正在提交我的 reg exp 任何建议都会很棒!

QRegExp valid_input(".*(-?\\d*\\.?\\d+)[\\s,]+(-?\\d*.?\\d+)[^\d]*");
valid_input.setMinimal(true);

if(valid_input.indexIn(value.toString()) == -1)
    return false;

QPointF new_point(valid_input.cap(1).toDouble(), valid_input.cap(2).toDouble());

提前致谢!


示例输入: 156, 264

预期产出: 156264

我的输出: 1562


示例输入: 156.2 264.52

预期产出: 156.2264.52

我的输出: 1562


示例输入: 156.2 264.52)

预期产出: 156.2264.52

我的输出: 1562

4

2 回答 2

2

两点:

  • 手册中的AFAICS您可以删除前导“.*”和尾随“[^\d]*”
  • setMinimal(true)谈论设置正则表达式贪心。

否则(由于缺少示例数据)您的正则表达式看起来不错。

http://www.regular-expressions.info/floatingpoint.html显示

[-+]?[0-9]*\.?[0-9]+

这基本上是您的正则表达式,带有一个额外的可选加号。

另一种方法是将正则表达式拆分为多个更简单的部分:

([-+]?\.\d+|[-+]?\d+\.\d*|[-+]?\d+)

于 2012-11-01T22:31:30.877 回答
1

您的正则表达式适用于您的示例。只需不要启用最小匹配,您就会得到预期的结果。

于 2012-11-01T22:48:07.810 回答