我想从带有正则表达式的String中提取链接。我找到了类似的帖子here,我尝试了这段代码
let regex = try! NSRegularExpression(pattern: "<a[^>]+href=\"(.*?)\"[^>]*>.*?</a>")
let range = NSMakeRange(0, text.characters.count)
let htmlLessString :String = regex.stringByReplacingMatches(in: text,
options: [],
range:range ,
withTemplate: "")
但建议的正则表达式删除了href
标记的所有内容。我的字符串看起来像
SOME stirng <a href="https://com.mywebsite.com/yfgvh/f23/fsd" rel="DFGHJ"> some text I need to keep </a> and other text
,预期结果是
SOME stirng https://com.mywebsite.com/yfgvh/f23/fsd some text I need to keep and other text
完美的结果是
SOME stirng some text I need to keep (https://com.mywebsite.com/yfgvh/f23/fsd) and other text
您是否有可能实现这一目标?
答案 0 :(得分:3)
当然它会删除href
内容,因为你是 ...用空字符串替换马达......
您的示例字符串与模式不匹配,因为缺少结束标记</a>
。
模式"<a[^>]+href=\"(.*?)\"[^>]*>"
检查直到链接后的结束角括号。
捕获的组位于匹配的索引1处。此代码打印所有提取的链接:
let text = "<a href=\"https://com.mywebsite.com/yfgvh/f23/fsd\" rel=\"DFGHJ\">"
let regex = try! NSRegularExpression(pattern: "<a[^>]+href=\"(.*?)\"[^>]*>")
let range = NSMakeRange(0, text.characters.count)
let matches = regex.matches(in: text, range: range)
for match in matches {
let htmlLessString = (text as NSString).substring(with: match.rangeAt(1))
print(htmlLessString)
}
答案 1 :(得分:1)
我不是Swift的常规开发人员,但是,您是否尝试使用此withTemplate
的{{1}}选项?
stringByReplacingMatches
答案 2 :(得分:0)
此正则表达式似乎适用于这种情况:href="(.*)" .*">(.*)<\/a>(.*)
,第1组将<a></a>
之后的<a></a>
和第3组文本之间的第2组文本放在一起,但是您必须使用此扩展程序可以从群组中获取信息,因为没有本机群组支持:http://samwize.com/2016/07/21/how-to-capture-multiple-groups-in-a-regex-with-swift/