如何在Objective-C中从NSString格式HTML提取span标签内的时间文本?
在Objective-C中提取HTML字符串里的span文本
嘿,在Objective-C里提取这段HTML中span标签内的时间文本,有几种实用的方法,我给你详细说说:
方法一:正则表达式(快速直接)
如果你的HTML结构比较固定,正则表达式是最快捷的方式。我们可以精准匹配带有class="releasedDate"的span标签,然后提取其内部的文本:
NSString *timeString = @"<h5 style=\"direction:ltr\"><span data-version-created-date=\"20180326T120530.000+0000\" class=\"releasedDate\">26-Mar-2018 12:05:30</span></h5>"; // 构建正则表达式,匹配目标span标签及其内部文本 NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<span[^>]+class=\"releasedDate\"[^>]*>(.*?)</span>" options:NSRegularExpressionCaseInsensitive error:nil]; NSTextCheckingResult *matchResult = [regex firstMatchInString:timeString options:0 range:NSMakeRange(0, timeString.length)]; if (matchResult) { // 提取第1个捕获组的内容(即span标签内的文本) NSString *extractedTime = [timeString substringWithRange:[matchResult rangeAtIndex:1]]; NSLog(@"提取到的时间:%@", extractedTime); // 输出:26-Mar-2018 12:05:30 } else { NSLog(@"未找到匹配的时间内容"); }
正则说明
<span[^>]+class=\"releasedDate\"[^>]*>:匹配带有releasedDate类名的span起始标签,[^>]+和[^>]*用来跳过标签内的其他属性(.*?):非贪婪匹配,捕获span标签内的所有文本内容</span>:匹配span的结束标签
方法二:利用NSAttributedString解析HTML(更安全)
如果HTML结构可能有变化,或者你不想写正则,可以用系统的NSAttributedString来解析HTML,直接提取纯文本:
NSString *timeString = @"<h5 style=\"direction:ltr\"><span data-version-created-date=\"20180326T120530.000+0000\" class=\"releasedDate\">26-Mar-2018 12:05:30</span></h5>"; NSData *htmlData = [timeString dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary *parseOptions = @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding) }; NSError *parseError = nil; NSAttributedString *attributedHtml = [[NSAttributedString alloc] initWithData:htmlData options:parseOptions documentAttributes:nil error:&parseError]; if (!parseError) { NSString *extractedText = attributedHtml.string; NSLog(@"提取到的文本:%@", extractedText); // 输出:26-Mar-2018 12:05:30 } else { NSLog(@"HTML解析失败:%@", parseError.localizedDescription); }
方法优势
这个方法由系统处理HTML的解析逻辑,不需要关心标签的具体结构,只要目标文本是HTML里的唯一可见文本,就能直接提取到。如果HTML里还有其他文本,你可能需要进一步处理,但对于你的需求来说完全够用。
内容的提问来源于stack exchange,提问作者iPhoneDeveloper
相关产品推荐
相关产品推荐

