字符串后的QRegExp和冒号

chy5wohz  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(141)

我的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

如果我删除RegExp中的':'字符,子字符串"Re""Fwd"将被删除,但':'字符仍保留在文本中。
如何设置regexp表达式以从文本中删除"Re:""Fwd:"子字符串?

zpf6vheq

zpf6vheq1#

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

\b只适用于\w类型,因此实际上可以编写

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

QRegExp rx("(Re:|Fwd:)");
ruarlubt

ruarlubt2#

我找到了解决办法。

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

相关问题