QString,删除标签和内容?

时间:2010-08-26 12:20:19

标签: c++ parsing qt qstring

message.Text()是一个QString。

我想删除一些文字。

文字可以是:

  1. 正常:“This is a text
  2. 使用标签:“<label1>something</label1>This is a text
  3. 首先,我发现文本是否有标签:

    !message.Text().contains("<label1>", Qt::CaseInsensitive))
    

    所以,如果有,我想删除第一部分,以获得正常文本“这是一个文本”。

    我试过了:

    first=message.Text().indexOf("<label1>");
    last=message.Text().lastIndexOf("</label1>");
    message.Text().remove(first,last);
    

    但是我得到了编译器错误C2663。

    我也知道message.Text().remove(QChar('<label1'), Qt::CaseInsensitive);是另一种方法。但就我而言,标签之间的部分是unkwnow。

    可以是<label1>something</label1><label1>oisdioadj</label><label1>7</label1> ....

    有什么想法吗?

    问候。

2 个答案:

答案 0 :(得分:2)

尝试以下方法:

#include <iostream>
using std::cout; using std::endl;
#include <QString>

int main()
{
  QString message = "<label1>something</label1>This is a test";
  const QString labelClose = "</label1>";
  const int labelCloseSize = labelClose.size();

  cout << "message: " << qPrintable(message) << endl;

  const int closePosition = message.lastIndexOf(labelClose);
  QString justText = message.remove(0, closePosition + labelCloseSize);
  cout << "just text: " << qPrintable(justText) << endl;
}

答案 1 :(得分:1)

我的建议是:在代码中保持简单,这将有助于简化您的工作。

您希望实现的内容与字符串相关,而不是标记。

我建议您从标签上获取文字,然后单独处理,然后将其与标签联系起来:

QString text = message.text();

/* Do whatever you need to do here with text */

message.setText(text);

此外,您遇到的错误可能是由于您尝试直接修改message.text()这是一个 const 引用:显然您无法修改const

我相信您尝试实现的目标可以使用QString::replace()完成。你必须使用正则表达式,所以如果你不熟悉它,可能会很困难。