如果第一个字符是使用 QRegExp 的逗号,如何删除它?

How to remove the first character if it's a comma using QRegExp?

我有以下 QRegExpValidator

QRegExpValidator doubleValidator = new QRegExpValidator(QRegExp("[-+]?[0-9]*[\.,]?[0-9]+([eE][-+]?[0-9]+)?"));

它应该是一个接受数字的双精度数字验证器,只有一个 "e" 符号,一个逗号或点和一个 + 或 - 字符串开头或 "e" 之后的符号符号。它适用于所有情况,除了它允许字符串以逗号或点开头。我尝试使用 [^\\.,] 和变体,它们确实有效,但在这种情况下,它还允许放置两个 +- 符号。

我怎样才能让它工作?

[-+]?[0-9]*[.,]?[0-9]+([eE][-+]?[0-9]+)? 模式允许 ,. 开头,因为 [-+]?[0-9]* 可以匹配空字符串,因为 [=16] =](一次或零次出现)和 *(零次或多次出现)量词,然后 [.,] 匹配单次出现的 .,。此外,如果您使用的方法默认不锚定模式,您还需要 ^$ 锚点围绕模式。

我建议用

解决这个问题
"^[-+]?[0-9]+([.,][0-9]+)?([eE][-+]?[0-9]+)?$"
 ^          ^^^^^^^^^^^^^^                  ^ 

请注意,您不需要转义字符内的点 class,[.] 始终仅匹配点字符。

[0-9]+([.,][0-9]+)? 匹配 1+ 个数字,然后是 ., 的可选序列,后跟 1+ 个数字。