我想清理 QString 数据以具有以下内容:
输入
[[normal]], here's [[double phrased|brackets]]
输出
normal, here's double phrased
只需选择每个子括号中的第一个元素就可以了。我不确定这样做的最佳方法是什么?
另外,我使用的是 Qt 4,所以这需要由 QRegExp 完成。
#include <QString>
#include <QDebug>
#include <QRegExp>
int main()
{
QRegExp rx("\\[{2}([^\\]\\|]+)(\\|[^\\]\\|]+)*\\]{2}");
QString mystr = "[[normal]], here's [[double phrased|brackets]]";
for (int pos = 0; (pos = rx.indexIn(mystr, pos)) != -1; pos += rx.matchedLength())
mystr.replace(pos, rx.matchedLength(), rx.cap(1));
qDebug() << mystr;
return 0;
}
您可能需要稍有不同的命令,但这仅供参考,以便您可以根据自己的环境进行调整:
g++ -I/usr/include/qt4/QtCore -I/usr/include/qt4 -fPIC -lQtCore main.cpp && ./a.out
"normal, here's double phrased"
请注意,使用 Qt 5,您可能应该QRegularExpression
稍后再进行讨论。
此外,这是一个很好的例子,说明为什么在某些情况下避免正则表达式是好的。在此处编写替换功能将花费我们更少的时间,最终结果将更具可读性,因此可维护。
感谢 lancif 的原创灵感。