1

我的应用程序访问了一个糟糕的 Web 服务,该服务返回如下输出:

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

澄清一下,文本不是字面上...的,信息也不是字面上的编号,我只是想表明它们是不同的。

我想以这样的方式显示它UIWebView

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

如何使用NSRegularExpressionor来完成此操作NSScanner?我NSRegularExpression对这两者都感到困惑,因为我不知道要使用的正确表达式,而且我不确定如何访问结果以将其放置在一个整齐的格式化字符串中。

天真地,逻辑是这样的:

  1. 查找 char 0 和第一次(仅)出现之间的所有文本\n\n,并将其调整为格式@"<p><b>%@</b><ul>",matchedString
  2. 虽然仍有文本,但查找当前字符和下一次出现\n(single) 之间的所有文本并适合格式@"<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>"];
4

2 回答 2

1

我认为您可以更轻松地在\n\nusingcomponentsSeparatedByString:方法中简单地拆分字符串:

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
于 2012-03-25T12:49:21.410 回答
0

您可以使用方法 -[NSString componentsSeparatedByString:] 来获取您想要的字符串数组。

于 2012-03-25T12:54:34.157 回答