Swift中如何使用正则表达式从推特URL中提取TweetID
Swift 从Twitter URL提取TweetID完整实现
前置修正说明
你现有的正则逻辑是可用的,仅需要补充转义符避免Swift字符串解析错误:正则中的\d需写为\\d,或者使用##包裹的原始字符串简化转义。
完整实现代码
import Foundation extension String { func getTweetID() -> String? { // 传入的self为Twitter URL字符串 let nsRange = NSRange(location: 0, length: self.utf16.count) // 原始字符串写法无需多重转义,可读性更高 let pattern = #"(?<=\/)\d+(?=(?:\?.*)?$)"# // 兼容原有写法:let pattern = "(?<=\\/)\\d+(?=(?:\\?.*)?$)" // 初始化正则实例 guard let regex = try? NSRegularExpression(pattern: pattern) else { return nil } // 匹配第一个符合规则的结果 guard let matchResult = regex.firstMatch(in: self, range: nsRange) else { return nil } // 将NSRange转为Swift原生Range guard let swiftRange = Range(matchResult.range, in: self) else { return nil } // 截取字符串返回 return String(self[swiftRange]) } }
调用示例
let testURL = "https://twitter.com/elonmusk/status/1383233200885882885" if let tweetID = testURL.getTweetID() { print(tweetID) // 输出结果:1383233200885882885 } // 带参数的URL也可正常提取 let testURLWithParam = "https://twitter.com/elonmusk/status/1383233200885882885?s=46&t=4xt" if let tweetID = testURLWithParam.getTweetID() { print(tweetID) // 同样输出:1383233200885882885 }
内容的提问来源于stack exchange,提问作者Praveen Nagaraj
相关产品推荐
相关产品推荐

