NSRegularExpression 检查 HTML 字符串的内容

NSRegularExpression Check Content of HTML String

我从服务器得到 html 字符串。如果它是空的,我们什么都不做。否则,我们将它们显示在 UIWebView 上。我可以在一个简单的 if 语句中使用 .isEmpty 轻松检查。

    Services.getBusinessProfile(countryCode: countryCode, companyId: companyData.cId) { (req, html) in

            if !html.isEmpty {
// rest of the code

问题是,有时我得到空标签:

<span style=\"font-family:HelveticaNeue; font-size: 16\"></span>

如何查看这个标签的内容?我想我必须为此使用 NSRegularExpression,因为这个线程:NSRegularExpression to extract text between two XML tags。但是不知道怎么用。

如果您只需要检索 html 文本中第一个 span 标记之间的子字符串,您可以使用字符串 upperBound 和 lowerBound 的范围来获取子字符串,如下所示:

let htmlString = "<span style=\"font-family:HelveticaNeue; font-size: 16\">Indonesia</span>"

if let lower = htmlString.range(of: "<span style=\"font-family:HelveticaNeue; font-size: 16\">")?.upperBound,
    let upper = htmlString.range(of: "</span>", range: lower..<htmlString.endIndex)?.lowerBound {
    let text = htmlString[lower..<upper]   //  "Indonesia"
}

在 Swift 中,您可以验证包含 HTML 文本的字符串在解析后是否会生成空字符串:

func isEmptyOrBlank(htmlStr: String) -> Bool {
    let htmlData = htmlStr.data(using: String.Encoding.unicode)
    do {
        let attributedText = try NSAttributedString(
            data: htmlData!,
            options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil
        )
        // Remove any whitespace and new line characters
        let result = attributedText.string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
        return result.isEmpty
    } catch let e as NSError {
        // Unable to parse, so assume it's empty
        return true
    }
}