我试图从用户字符串中提取两个数字。我有正则表达式工作,但第二个数字捕获不够贪婪!我无法弄清楚如何根据我的需要重新格式化,我提交我的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
预期输出: 156
和264
我的输出: 156
和2
示例输入: 156.2 264.52
预期输出: 156.2
和264.52
我的输出: 156
和2
示例输入: 156.2 264.52)
预期输出: 156.2
和264.52
我的输出: 156
和2
答案 0 :(得分:2)
两点:
setMinimal(true)
谈到设置正则表达式而不是贪婪。否则(缺少示例数据)你的正则表达式看起来很好。
http://www.regular-expressions.info/floatingpoint.html显示
??[ - +] [0-9] * \ [0-9] +
这基本上是你的正则表达式,带有一个额外的可选加号。
替代方案,可以将正则表达式分成多个更简单的部分:
([ - +] \ \ d + |??[ - +] \ d + \ \ d * |。?[ - +] \ d +)
答案 1 :(得分:1)
您的正则表达式适用于您的示例。只是不要启用最小匹配,您将获得预期的结果。