使用 QRegExp 的双精度值的正则表达式

Posted

技术标签:

【中文标题】使用 QRegExp 的双精度值的正则表达式【英文标题】:Regular expression for double values using QRegExp 【发布时间】:2014-03-31 12:57:10 【问题描述】:

我正在为 QLineEdit 编写正则表达式检查器,并且正在使用 QRegExp。

我已经写了一个 int 值检查器:

QRegExp *expression_ = new QRegExp("^(0|[1-9]1,1[0-9]0,9);

但我对双精度值有疑问,更具体地说,我无法区分这个数字的大小写。 F.E 0.210 或 0.001。

请帮助我为双值实现此功能。 提前致谢。

【问题讨论】:

您的输入、当前输出和所需输出是什么?另外,[1-9]1,1 应该是什么意思? :) 输入是一个字符串。 QRegExp 检查字符串是否可以表示为 int 值。 0|[1-9]1,1 表示如果数字可以以 0 开头且没有多余的数字,或者可以以 1-9 的数字之一开头。 我很高兴知道您在字符串上使用正则表达式,但是您想要匹配的模式是什么?请提供这些字符串的一些示例以及您希望在其中匹配的内容。 “我无法区分这个数字的大小写”是什么意思?你想做什么?请编辑您的问题以添加有关此类问题的更多信息。 您只是想检查您的字符串是否为整数? 不是整数,是双精度 【参考方案1】:

这是我用作正/负浮点值的正则表达式字符串

[+-]?\\d*\\.?\\d+

【讨论】:

范围呢?【参考方案2】:

看起来您正在尝试重新发明***。请参阅:QDoubleValidatorQIntValidator

【讨论】:

我在使用 Qt 验证器时遇到了很多问题,例如双重验证器与逗号和点混淆。我发现 QIntValidator 也很奇怪,它接受字段中的逗号,但随后将其删除,因此 23,2 变为 232。此外,如果您键入 23,2 并且超出范围,它会将逗号移动到 2,32 .. . 只是不是你想用的。我发现编写您自己的验证器类并覆盖验证函数(这就是正则表达式所在)是确保正确性的方法。 如果您不了解区域设置,您可能会感到困惑。我见过许多开发人员对小数分隔符进行硬编码以及与奇怪的错误作斗争,因为他们不明白好的应用程序也应该支持其他语言,而其他语言对数字有不同的作用。【参考方案3】:

试试这个正则表达式的十进制数:

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

使用?: 此处忽略组捕获。

试试online demo

【讨论】:

我发现这更准确,因为不允许使用前导零。无论如何,我会将其扩展为^-?(?:0|[1-9][0-9]*)\.?[0-9]+$,这样也可以捕获负值和没有点的值。感谢您的链接 - 非常有帮助!【参考方案4】:

我有同样的问题,下面的表达式有助于解决我的任务,试试吧: \\d*\.\\d*

它也有助于获得像“0.”这样的数字(没有小数部分)。

【讨论】:

【参考方案5】:

为了管理指数数据:

^-?(?:0|[1-9][0-9]*)\.?[0-9]+([e|E][+-]?[0-9]+)?$

【讨论】:

以上是关于使用 QRegExp 的双精度值的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

QRegExp 正则表达式详解

QRegexp 特质(与 perl 相比):如何在没有惰性量词的情况下编写此正则表达式?

Qt笔记-使用正则表达式匹配URL及获取Get请求后面的参数(QRegExp)

正则表达式

正则表达式中的双引号

没有LookBehind功能的正则表达式