Разобрать и удалить часть QString - PullRequest
2 голосов
/ 27 августа 2010

Я хочу проанализировать некоторый (или чистый) код XML из QString.

Мой QString похож на:

<a>cat</a>My cat is very nice.

Я хочу получить 2 строки:

кошка и Моя кошка очень милая.

Я думаю, что анализатор XML может и не понадобиться, но в будущем у меня будет больше тегов в той же строке, так что это тоже очень интересный момент.

Ответы [ 2 ]

6 голосов
/ 27 августа 2010

В Qt у вас есть класс QRegExp, который может помочь вам разобрать вашу QString.

Согласно примеру документации:

 QRegExp rxlen("^<a>(.*)</a>(.*)$");
 int pos = rxlen.indexIn("<a>cat</a>My cat is very nice.");
 QStringList list
 if (pos > -1) {
     list << = rxlen.cap(1); // "cat"
     list << = rxlen.cap(2); // "My cat is very nice."
 }

Список QStringListбудет содержать cat и My cat is very nice.

3 голосов
/ 27 августа 2010

Вы можете использовать регулярное выражение <a>(.*)</a>(.*).

Если вы используете Boost, вы можете реализовать его следующим образом:

boost::regex exrp( "^<a>(.*)</a>(.*)$" );
boost::match_results<string::const_iterator> what;
if( regex_search( input_string, what, exrp ) ) {
    std::string tag( what[1].first, what[1].second );
    std::string value( what[2].first, what[2].second );
}
...