【问题标题】:Remove HTML from NSString but keep maths symbols从 NSString 中删除 HTML 但保留数学符号
【发布时间】:2015-02-02 18:04:23
【问题描述】:

我需要从 NSString 中删除所有 HTML 格式,但我需要保留与字符串内容相关的任何

例如:

<p>Dogs:  For dogs <10KGs use 1:1000 solution (1000 µg/ml) diluted to 5-10 ml.</p>

我需要阅读:

Dogs:  For dogs <10KGs use 1:1000 solution (1000 µg/ml) diluted to 5-10 ml.

到目前为止,常见的方法是使用以下内容:

  NSRange r;
  NSString *s = [[self copy] autorelease];
  while ((r = [s rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound)
  s = [s stringByReplacingCharactersInRange:r withString:@""];
  return s;

但是这种方法会导致:

狗:给狗

第一个 HTML 标记被正确剥离,但 关闭是它,因此删除了整个部分。

【问题讨论】:

  • HTML 包含不属于标签的&amp;lt; 格式错误(它们应编码为&amp;lt;)。因此,您正在尝试解析其中有错误的内容。这并不容易可靠。例如,如果输入包含&lt;em,那么标签是否缺少右尖括号 (&gt;) 或小于运算符?
  • 不幸的是,我无法控制传入 HTML 的格式。但是,我相当肯定它只会包含 标签。

标签: ios objective-c regex cocoa


【解决方案1】:

将您的代码更改为,

NSRange r;
NSString *s = [[self copy] autorelease];
while ((r = [s rangeOfString:@"<[^<>]+>" options:NSRegularExpressionSearch]).location != NSNotFound)
s = [s stringByReplacingCharactersInRange:r withString:@""];
return s;

DEMO

这将去掉上面例子中的段落标签。 [^&lt;&gt;]+ 匹配任何字符,但不匹配 &lt;&gt; 一次或多次。

【讨论】:

  • 啊,这似乎完美地完成了这项工作,我显然没有注意我的代码中的正则表达式。谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 2011-05-13
  • 2012-10-08
  • 2021-01-27
  • 1970-01-01
相关资源
最近更新 更多