在字符串之间拆分 HTML 字符串 Swift



是否可以只获取我通过URL获得的HTML字符串的一部分?

示例代码如下:

let myURLString = "https://myUrl.something"
guard let myURL = NSURL(string: myURLString) else {
print("Error: (myURLString) doesn't seem to be a valid URL")
return
}
do {
let myHTMLString = try String(contentsOf: myURL as URL)
let htmlString = String(myHTMLString)
print("HTML: (myHTMLString)")
} catch let error as NSError {
print("Error: (error)")
}

我想把标签里的东西<h3 class="post-title"></h3>

我知道我应该使用正则表达式,但我真的不知道如何以正确的方式设置它。我尝试了这样的事情:

let myURLString = "https://www.fvgtech.it/category/podcast/"
guard let myURL = NSURL(string: myURLString) else {
print("Error: (myURLString) doesn't seem to be a valid URL")
return
}
do {
let myHTMLString = try String(contentsOf: myURL as URL)
let htmlString = String(myHTMLString)
if let match = htmlString.range(of: "(<h3.+)", options: .regularExpression) {
print("Found",htmlString.substring(with: match))
}

print("HTML: (myHTMLString)")
} catch let error as NSError {
print("Error: (error)")
}

但它只是打印<h3 class="post-title">而不是中间的内容。提前感谢!

只是我们需要搜索开始字符串和结束字符串之间的所有子字符串 请参阅字符串的扩展

let myURLString = "https://www.fvgtech.it/category/podcast/"
guard let myURL = NSURL(string: myURLString) else {
print("Error: (myURLString) doesn't seem to be a valid URL")
return
}
do {
let myHTMLString = try String(contentsOf: myURL as URL)
let htmlString = String(myHTMLString)
print(htmlString.allStringsBetween("<h3 class="post-title">", andString: "</h3>"))
} catch let error as NSError {
print("Error: (error)")
}

字符串的扩展

extension String{
func allStringsBetween(start: String, end: String) -> [Any] {
var strings = [Any]()
var startRange: NSRange = (self as NSString).range(of: start)
while true {
if startRange.location != NSNotFound {
var targetRange = NSRange()
targetRange.location = startRange.location + startRange.length
targetRange.length = self.count - targetRange.location
let endRange: NSRange = (self as NSString).range(of: end, options: [], range: targetRange)
if endRange.location != NSNotFound {
targetRange.length = endRange.location - targetRange.location
strings.append((self as NSString).substring(with: targetRange))
var restOfString =  NSRange()
restOfString.location = endRange.location + endRange.length
restOfString.length = self.count - restOfString.location
startRange = (self as NSString).range(of: start, options: [], range: restOfString)
}
else {
break
}
}
else {
break
}
}
return strings
}
}

最新更新