首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QRegexp缺少数字

QRegexp缺少数字
EN

Stack Overflow用户
提问于 2016-08-02 01:25:24
回答 1查看 39关注 0票数 0

我们在这一点上都被难住了:

代码语言:javascript
复制
QRegExp kcc_stationing("(-)?(\\d+)\\.(\\d+)[^a-zA-Z]");
QString str;
if (kcc_stationing.indexIn(description) > -1)
{

    str = kcc_stationing.cap(1) + kcc_stationing.cap(2) + "." + kcc_stationing.cap(3);
            qDebug() << kcc_stationing.cap(1);
            qDebug() << kcc_stationing.cap(2);
            qDebug() << kcc_stationing.cap(3);
            qDebug() << "Description: " << description;
            qDebug() << "Returned Stationing string: " << str;
}

在“1082.006”上运行以下代码:

注意遗漏的"6“

经过一些盲目的猜测,我们删除了[^a-zA-Z]并得到了正确的答案。我们最初添加了这一点,这样我们就会拒绝任何直接附加了其他字符而没有空格的数字。

例如: 10.05D应该被拒绝。

谁能解释一下为什么这个额外的部分会导致我们失去最后的"6"?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-02 01:42:43

[^a-zA-Z]是一个字符类。字符类匹配一个字符。它不会匹配字符串的末尾,因为那里没有字符。

为了得到这个结果,引擎将所有的数字与\\d+进行匹配,包括最后一个。然后,它将需要回溯,以便满足最后一个字符类。

我认为您希望允许零宽度匹配(特别是当它是字符串的末尾时)。在您的例子中,最容易使用的是:

代码语言:javascript
复制
(-)?(\\d+)\\.(\\d+)([^a-zA-Z]|$)

或者,如果Qt支持非捕获组:

代码语言:javascript
复制
(-)?(\\d+)\\.(\\d+)(?:[^a-zA-Z]|$)

请注意,我还推荐使用[.]而不是\\.,因为我觉得它提高了可读性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38704724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档