有没有更简单的方法来过滤非字母字符? C ++

时间:2017-04-29 09:46:16

标签: c++ qt

是否有更简单的方法可以简单地删除或过滤掉C ++中所有非字母字符?

我正在加载一个文件,将每个单词排序成字典,我希望字典只包含单个整个单词,没有空格和非字母字符。

//Read the entire file (stream) into QString variable "file"
            QString file = in.readAll();
            QStringList NewList = file.split(QRegExp("[\\s\\,\\!\\?\\...\\;\\:\\-\\[\\]\\{\\}\\+\\-\\=\\_\\<\\>\\]QString::SkipEmptyParts);

这种方法确实有效,但只是列出所有非字母字符非常无效。

有人可以告诉我更快的方法吗?

我确信这不是最好的方式......

2 个答案:

答案 0 :(得分:1)

使用正则表达式是正确的方法,但使用它来查找单词而不是分割的位置。然后,您的代码变得更具表现力,并且不易出错。此外,使用Qt5的新QRegularExpression类是因为它具有更好的性能。

至于正则表达式:请参阅任何教程并阅读\w\b的含义。作为一个例子,不需要\b,但出于演示目的,我把它放在那里......):

QString data = "Lorem ipsum dolor sit amet, consetetur - sadipscing - elitr. Stet clita kasd gubergren!";

QRegularExpression rx("\\b(\\w+)\\b");
QRegularExpressionMatchIterator matches = rx.globalMatch(data);
while (matches.hasNext()) {
    QRegularExpressionMatch match = matches.next();
    qDebug() << match.captured(1);
}

答案 1 :(得分:0)

对于您的具体情况,我会先找出文件是否先预先确定格式,而不是根据正则表达式拉取字符,这可能效率更低。 例如。分界,每行字等。

但是,RegEpx的一种简单形式可能是:

QStringList NewList = file.split(QRegExp("\\W", QString::SkipEmptyParts);   

虽然这不包括撇号和重音等内容。