gpt4 book ai didi

regex - 如何仅从此字符串获取链接?

转载 作者:搜寻专家 更新时间:2023-11-01 05:56:35 25 4
gpt4 key购买 nike

我只想从这个字符串中获取链接:

"<p><a href=\"https://www.youtube.com/watch?v=i2yscjyIBsk\">https://www.youtube.com/watch?v=i2yscjyIBsk</a></p>\n"

我希望输出为 https://www.youtube.com/watch?v=i2yscjyIBsk

那么,我该如何实现呢?

我试过:

func matches(for regex: String, in text: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex)
let nsString = text as NSString
    let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length))
    return results.map { nsString.substring(with: $0.range)}
} catch let error {    
}

并尝试了这个正则表达式:"<a[^>]+href=\"(.*?)\"[^>]*>.*?</a>"

但我还是想不通。

最佳答案

通过使用 NSDataDetector您可以准确提取链接的类:

let text = "<p><a href=\"https://www.youtube.com/watch?v=i2yscjyIBsk\">https://www.youtube.com/watch?v=i2yscjyIBsk</a></p>\n"
let types: NSTextCheckingType = .Link
let detector = try? NSDataDetector(types: types.rawValue)

guard let detect = detector else {
return
}

let matches = detect.matchesInString(text, options: .ReportCompletion, range: NSMakeRange(0, text.characters.count))

for match in matches {
print(match.URL!)
}

描述: NSDataDetector类可以匹配日期、地址、链接、电话号码和交通信息。 Reference .

匹配内容的结果返回为 NSTextCheckingResult对象。然而,NSTextCheckingResult NSDataDetector 返回的对象与基类返回的不同NSRegularExpression .

NSDataDetector 返回的结果将属于数据检测器类型之一,具体取决于返回结果的类型,并且它们将具有相应的属性。例如,日期类型的结果有一个日期,timeZone和持续时间;类型链接的结果有一个 url等等。


还有另一种获取<a> ... </a> 之间的链接和其他特定字符串的方法标签:

let string = "<p><a href=\"https://www.youtube.com/watch?v=i2yscjyIBsk\">https://www.youtube.com/watch?v=i2yscjyIBsk</a></p>\n"
let str = string.stringByReplacingOccurrencesOfString("<[^>]+>", withString: "", options: .RegularExpressionSearch, range: nil)
print("string: \(str)")

输出:

string: https://www.youtube.com/watch?v=i2yscjyIBsk

注意: 我建议您使用上述解决方案来获取链接,特别感谢。

关于regex - 如何仅从此字符串获取链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40800125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com