在QT中删除带有贪婪正则表达式的字符串

时间:2015-10-08 19:07:05

标签: c++ regex qt

感谢您提前提供任何帮助。我对qt很新,请原谅我的新手问题。

我想替换image1 =" jdjddsj"用" im"在字符串中使用正则表达式。这些参与者中有更多与xx =" ..."在我的字符串中,所以我想运行QRegExp贪婪,这似乎不起作用。

QString str_commando;

str_commando = "python python.py image1=\"sonstzweiteil\" one! path=\"sonstwas\" image2=\"sonsteinanderes\" two!"

QString str(str_commando); // The initial string.
qDebug() << str_commando.remove(QRegExp ("age1=\"([^>]*)\""));

/* Set field */
ui->lineeCommand->setText(str_commando);

遗憾的是:结果: python python.py im two!

 qDebug() << str_commando.remove(QRegExp ("age1=\"([^>]*)\""));

我之前尝试过。结果相同。

我哪里错了?感谢您的帮助!

SOLUTION:

qDebug() << str_commando.replace(QRegExp ("image1=\"([^\"]*)\""), "im");

1 个答案:

答案 0 :(得分:1)

字符集[^>]包含"。这意味着

中的正则表达式
str_commando.remove(QRegExp ("age1=\"([^>]*)\""));

匹配age1=\"sonstzweiteil\" one! path=\"sonstwas\" image2=\"sonsteinanderes\"。如果您确定引号之间没有",则可以设置正则表达式 minimal 而不是 greedy 。另一种解决方案是将集[^>]设置为[^>"]。我也不知道为什么你禁止>

查看 QString 的文档后,我想你也可以这样做:

str_commando.replace(QRegExp("image1=\"([^\"]|\\\")*\""), "im");

或者如果您想要im="..."

str_commando.replace(QRegExp("image1=\"((?:[^\"]|\\\")*)\""), "im=\"\\1\"");