如何指定QString :: indexOf方法不要对两个单词之间的空格数敏感?

时间:2012-03-08 18:35:15

标签: c++ qt indexof qstring

我写了一个源代码,如:

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 :: CaseInsensitive); 只有在“end”和“here”之间有三个空格时才能找到QString e = "end here";。这是有问题的,因为在文中我读到这两个词之间的空格肯定会不时有所不同。此外,我需要写两个单词“end”和“here”。我试图将问题简化为基础,并希望有人有想法/解决方案。

2 个答案:

答案 0 :(得分:3)

使用QString::simplified()方法将空格间隔数减少为1。

答案 1 :(得分:3)

您还可以尝试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;
}