Используйте RegEx или NSScanner в Obj-C для преобразования символов новой строки в HTML-маркеры
Мое приложение обращается к плохому веб-сервису, который возвращает вывод, подобный этому:
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
и потому, что я не знаю правильное выражение для использования, и я не уверен, как я получаю доступ к результатам, чтобы поместить его в аккуратно отформатированную строку.
Наивно логика будет примерно такой:
- Найти весь текст между символом 0 и первым (единственным) вхождением
\n\n
и вписать это в формат@"<p><b>%@</b><ul>",matchedString
- Пока есть текст, найдите весь текст между текущим символом и следующим появлением
\n
(один) и вписывается в формат@"<li>%@</li>"
- Когда нет
\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 ответа
Я думаю, что вам будет легче просто разделить строку на \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
Вы можете использовать метод -[NSString componentsSeparatedByString:], чтобы получить то, что вы хотите, в виде массива строк.