QRegExp и двоеточие (:) после строки

У меня проблема с QRegExp. Это мой источник. Я хотел бы, чтобы подстрока «Re:» и «Fwd:» была удалена:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QRegExp>
#include <iostream>

using namespace std;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString s = "Fwd: Re: my subject line";
    cout << "original string: " << s.toLatin1().data() << endl;

    QRegExp rx("\\b(Re:|Fwd:)\\b");
    rx.setCaseSensitivity(Qt::CaseInsensitive);

    s.replace(rx,"");
    cout << "replaced string: " << s.toLatin1().data() << endl;

}

Это не работает. Выход:

original string: Fwd: Re: my subject line
replaced string: Fwd: Re: my subject line

Если я удалю символ «:» в регулярном выражении, подстрока «Re» и «Fwd» будут удалены, но символ «:» останется в тексте.

Как установить выражение регулярного выражения для удаления из текста подстроки «Re:» и «Fwd:»?

С уважением.


person felice.murolo    schedule 21.01.2018    source источник


Ответы (2)


QRegExp rx("\\b(Re:|Fwd:)\\b");

\b работает только с типом \w (поправьте меня, если я ошибаюсь), так что вы действительно можете написать

QRegExp rx("\\b(Re:|Fwd:)");

or

QRegExp rx("(Re:|Fwd:)");
person Lui Armstrong    schedule 23.01.2018

Я нашел решение.

QString s = "Fwd: Re: Re: my subject: line";
cout << "original string: " << s.toLatin1().data() << endl;

QRegExp rx("\\b(Re|Fwd)\\b[:]");
rx.setCaseSensitivity(Qt::CaseInsensitive);

s.replace(rx,"");
s = s.trimmed();
cout << "replaced string: " << s.toLatin1().data() << endl;

и вывод:

original string: Fwd: Re: Re: my subject: line
replaced string: my subject: line

У кого-то есть лучший способ?

С уважением

person felice.murolo    schedule 21.01.2018