Используйте RegEx или NSScanner в Obj-C для преобразования символов новой строки в HTML-маркеры - PullRequest
1 голос
/ 25 марта 2012

Мое приложение обращается к плохому веб-сервису, который возвращает вывод, подобный следующему:

Title\n\nInfo1\nInfo2\nInfo3\n ...

Чтобы уточнить, текст не буквально ..., а информация не буквально пронумерована, я просто хотел показатьчто они различны.

Я хочу отобразить его в UIWebView, например:

<p><b>Title</b><ul><li>Info1</li><li>Info2</li><li>Info3</li></ul></p>

Как мне это сделать, используя NSRegularExpression или NSScanner?Я не совсем понимаю, что такое NSRegularExpression, потому что я не знаю правильное выражение для использования, и я не уверен, как получить доступ к результатам, чтобы поместить его в аккуратно отформатированную строку.

Наивно, логикабыть примерно таким:

  1. Найти весь текст между символом 0 и первым (единственным) вхождением \n\n и вставить его в формат @"<p><b>%@</b><ul>",matchedString
  2. Пока еще есть текстнайдите весь текст между текущим символом и следующим вхождением \n (одиночный) и поместите его в формат @"<li>%@</li>"
  3. Когда не осталось \n, добавьте @"</ul></p>" и назовите его днем.

Посоветуйте, пожалуйста, как я могу реализовать эту логику или альтернативно закодировать ее в регулярном выражении.

Ответ реализован

Я просто хотел опубликовать свою временную реализациюответ на случай, если кто-нибудь в будущем застрянет:

NSArray *parts = [self.dogFoodBenefits componentsSeparatedByString:@"\n"];
NSString *benefitsString = [NSString stringWithFormat:@"<h4>Benefits</h4><b>%@</b><p><ul>",[parts objectAtIndex:0]];
for (int i = 2; i < [parts count]; i++) {
    if ([[parts objectAtIndex:i] length] > 1)
        benefitsString = [benefitsString stringByAppendingFormat:@"<li>%@</li>",[parts objectAtIndex:i]];
}
benefitsString = [benefitsString stringByAppendingString:@"</ul></p>"];

Ответы [ 2 ]

1 голос
/ 25 марта 2012

Я думаю, вам будет проще просто разделить строку на \n\n, используя componentsSeparatedByString: метод:

NSArray *parts = [webTextStr componentsSeparatedByString:@"\n\n"];
// Use the initial or the only element inside <b></b> tag
// Put the remaining elements, if any, in the <li></li> tags
0 голосов
/ 25 марта 2012

вы можете использовать метод - [NSString componentsSeparatedByString:], чтобы получить то, что вы хотите, в виде массива строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...