2つの単語の間のスペースの数に敏感ではないQString :: IndexOfメソッドを指定する方法?
質問
:のようなソースコードを書きました
int main(int argc, char *argv[]) {
QFile File (directory + "/File");
if(File.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream Stream (&File);
QString FileText;
do
{
FileText = Stream.readLine();
QString s = "start";
QString e = "end here";
int start = FileText.indexOf(s, 0, Qt::CaseInsensitive);
int end = FileText.indexOf(e, Qt::CaseInsensitive);
if(start != -1){ // we found it
QString y = FileText.mid(start + s.length(), (end - (start + s.length())));
qDebug() << y << (start + s.length()) << (end - (start + s.length()));
}
.
}
私の問題ここでは、int end= filetext.indexof(e、qt :: caseinsensivity)です。
QString e = "end here";
を使用すると、単語「end」と「ここ」の間に3つのスペースがあるときに見つかりました。テキストでは、私はこれら2つの単語の間のスペースを読みますので、私は時々時間とは異なるためです。さらに、「終了」と「ここ」の両方を書く必要があります。私は問題を根拠に縮小し、誰かがアイデア/解決策を持っていることを願っています。
解決
QString::simplified()
メソッド。
他のヒント
qregexp :
#include <QDebug>
#include <QString>
#include <QRegExp>
int main()
{
QString text("start ABCDE1234?!-: end here foo bar");
// create regular expression
QRegExp rx("start\\s+(.+)\\s+end\\s+here", Qt::CaseInsensitive);
int pos=0;
// look for possible matches
while ((pos=rx.indexIn(text, pos)) != -1) {
qDebug() << rx.cap(1); // get first match in (.+)
pos+=rx.matchedLength();
}
return 0;
}
. 所属していません StackOverflow