【问题标题】:Remove complete html tag with content删除带有内容的完整 html 标记
【发布时间】:2021-06-29 08:58:16
【问题描述】:

我有这个内容:

var a = "Hello <sup foot_note=\"81277\">1</sup> World"

我想删除整个 html 标签:&lt;sup foot_note=\"81277\"&gt;1&lt;/sup&gt;

我用这段代码试了一下:

let str1 = getText().replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)
var str2 = str1.replacingOccurrences(of: "&[^;]+;", with: "", options: .regularExpression, range: nil)

这不会删除“1”,所以我得到“Hello 1 World”。我该如何解决这个问题?

【问题讨论】:

  • 感谢这项工作!

标签: swift regex string


【解决方案1】:

对于当前示例,您可以使用

a.replacingOccurrences(of: #"(?s)\s*<(\w+)(?:\s[^>]+)?>.*?</\1>"#, with: "", options: .regularExpression, range: nil) # #1
a.replacingOccurrences(of: #"(?i)\s*<sup(?:\s[^>]+)?>[^<]*</sup>"#, with: "", options: .regularExpression, range: nil) # #2

请注意,正则表达式不适合删除任意 HTML 标记(上面的第 1 行),因为它们可以嵌套。第一个解决方案实际上可能相当危险

因此,如果您只想删除 sup 及其内容的标签(通常不包含嵌套标签且本身不嵌套),您可以使用第 2 行正则表达式。

请参阅regex demo

详情

  • (?i) - 不区分大小写的搜索
  • \s* - 零个或多个空格
  • &lt;sup - &lt;sup 字符串
  • (?:\s[^&gt;]+)? - 可选出现一个空格,然后是一个或多个除&gt; 之外的字符
  • &gt; - 一个 &gt; 字符
  • [^&lt;]* - 除&lt; 之外的零个或多个字符
  • &lt;/sup&gt; - &lt;/sup&gt; 文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-09
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 2013-05-17
    相关资源
    最近更新 更多