QRegExp提取两个数字

时间:2012-11-01 22:13:05

标签: regex qt

我试图从用户字符串中提取两个数字。我有正则表达式工作,但第二个数字捕获不够贪婪!我无法弄清楚如何根据我的需要重新格式化,我提交我的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

2 个答案:

答案 0 :(得分:2)

两点:

  • 来自manual的AFAICS,您可以删除前导“。*”并尾随“[^ \ d] *”
  • setMinimal(true)谈到设置正则表达式而不是贪婪。

否则(缺少示例数据)你的正则表达式看起来很好。

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

  

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

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

替代方案,可以将正则表达式分成多个更简单的部分:

  

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

答案 1 :(得分:1)

您的正则表达式适用于您的示例。只是不要启用最小匹配,您将获得预期的结果。