【问题标题】:Extract part of NSString from <span to > with variable chars between从 <span to > 中提取 NSString 的一部分,其间有可变字符
【发布时间】:2013-11-18 23:09:14
【问题描述】:

我得到了一个像这样的 NSString:

NSString *s = @"&lt;span class='class1'&gt;here some text&lt;/span&gt;";

class1 可以是任何东西(例如 class2、或 largetext 或其他)。

我想得到以下内容:

NSString *wantedString = @"here some text";

我该怎么做?

【问题讨论】:

  • 似乎是 iOS,而不是 IOS...
  • 您查看过NSString 的文档吗?你做过搜索吗?现有很多关于从字符串中提取子字符串的主题。
  • 另外,字符串是从哪里来的?如果是任意 HTML,最好使用 XML 解析器。在有人建议使用正则表达式之前,我将把这个stackoverflow.com/questions/1732348/… 放在这里。

标签: ios objective-c nsstring substring


【解决方案1】:

如果开销值得,使用 xml 解析器是一个很好的解决方案。

使用正则表达式:

NSString *s = @"<span class='class1'>here some text</span>";
NSString *pattern = @"<span class='[^']+'>([^<]+)";

NSRegularExpression *regex = [NSRegularExpression
                              regularExpressionWithPattern:pattern
                              options:NSRegularExpressionCaseInsensitive
                              error:nil];
NSTextCheckingResult *textCheckingResult = [regex firstMatchInString:s options:0 range:NSMakeRange(0, s.length)];

NSRange matchRange = [textCheckingResult rangeAtIndex:1];
NSString *match = [s substringWithRange:matchRange];
NSLog(@"Found string '%@'", match);

NSLog 输出:

找到字符串'这里有一些文字'

【讨论】:

  • 请记住,大多数 HTML 不是有效的 XML。这取决于有问题的 HTML。这意味着标准的 XML 解析器会卡在通用 HMTL 上。
  • @rmaddy 如果您使用的是您不应该使用的 HTML 类型(即 HTML != 5)。 HTML5 是一种必须考虑使用的唯一格式,它是有效的 XML。
【解决方案2】:

如果此 html 已加载到 web 视图中,请使用 stringByEvaluatingJavaScriptFromString 访问 span 标签的 innerHTML。

stringByEvaluatingJavaScriptFromString 可用于通过 DOM(文档对象模型)访问 html 的任何部分,例如标签的内容。

【讨论】:

  • 这就像开车去汽车站买票,然后坐公共汽车回家。
  • 既然您已经拥有了 HTML,为什么还要麻烦将其放入 webview 并再次提取它?如果它是任意的 HTML,一个简单的 XML 解析器应该做,但除非 OP 提供更多细节,否则不可能说。
  • html 没有被再次提取,innerHTML 是,即标签内的东西,正如 OP 所要求的那样。一个 XML 解析器需要超过 3 行,那么它有多复杂?
  • 好吧,也许复杂不是正确的形容词。假设这是一个矫枉过正。使用 XML 很容易成为单行代码,并且可以避免产生完全不必要的成熟 UIWebView
  • 我已经编辑了我的答案,以便那些不熟悉 stringByEvaluatingJavaScriptFromString 的人更容易理解
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多