浮点 - 正则表达式

时间:2012-01-08 02:51:44

标签: regex qt

我正在努力理解这个简单的正则表达式。我有以下尝试:

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

我将其理解为零对多数字,后跟一对零句点,最后以零对多数字结尾。

我不想与上述完全匹配。我不想要积极/消极支持或任何其他特殊支持类型。但是,出于某种原因,上述内容也与似乎是随机字符的内容相匹配。以下所有因素无论如何匹配:

  • F32
  • 32A
  • 32 -
  • = 33

在答案中,我正在寻找:

  • 解释为什么我的正则表达式不起作用。
  • 一个工作版本,解释了它的工作原理。

编辑:由于似乎造成了麻烦,我添加了“QT”标记,即我正在使用的环境。

编辑:由于持续混淆,我将添加一些代码。我开始认为我要么误用QT,要么QT有问题:

void subclassedQDialog::setupTxtFilters()
{
    QRegExp numbers("^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$");
    txtToFilter->setValidator(new QRegExpValidator(numbers,this));
}

这是来自子类QDialog。 txtToFilter是一个QLineEdit。如果有人可以提出可能相关的建议,我可以提供更多代码。虽然上面的表达不是原文,但它是下面评论中的一个,也是以同样的方式失败。

4 个答案:

答案 0 :(得分:3)

你的问题是你还没有逃脱\正确,你需要把\\。否则C ++编译器将删除\(至少gcc执行此操作,并发出警告)并且正则表达式引擎将处理。任何角色。

答案 1 :(得分:1)

^放在开头,将$放在最后。这会将你的正则表达式固定在字符串的开头和结尾。

答案 2 :(得分:1)

您的表达式在字符串中间找到匹配项。如果将锚点添加到表达式的开头和结尾,则列表中的字符串将被忽略。您的表达式会匹配空字符串,但这不是您为匹配.9999.字符串而支付的价格。

^[0-9]*\.?[0-9]*$

更好的选择是

^[0-9]*(\.[0-9]+)?$

因为只有在它后面至少有一个数字时才会匹配小数点。

答案 3 :(得分:1)

其中一个必须是+而不是*。您要允许“.9”有效,还是要求领先0