是否有更简单的方法可以简单地删除或过滤掉C ++中所有非字母字符?
我正在加载一个文件,将每个单词排序成字典,我希望字典只包含单个整个单词,没有空格和非字母字符。
//Read the entire file (stream) into QString variable "file"
QString file = in.readAll();
QStringList NewList = file.split(QRegExp("[\\s\\,\\!\\?\\...\\;\\:\\-\\[\\]\\{\\}\\+\\-\\=\\_\\<\\>\\]QString::SkipEmptyParts);
这种方法确实有效,但只是列出所有非字母字符非常无效。
有人可以告诉我更快的方法吗?
我确信这不是最好的方式......
答案 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);
虽然这不包括撇号和重音等内容。