删除Swift中的wikitext超链接



我试图删除Wikitext超链接格式,只获取链接文本,但我尝试的所有内容要么什么都不删除,要么删除的内容比预期的多得多。以下是一般模式:

[[user interface]] → user interface
[[Telephone call|calls]] → calls
[[camera phone|take pictures]] → take pictures

如果[[]]之间的文本包含|,我会尝试删除[[|之间的文本,删除右括号,但保留|]]之间的文本。如果它不包含|,我只想去掉括号,保留括号之间的文本。

示例:

iPhone有一个围绕[[多点触摸]]屏幕构建的[[用户界面]]。它连接到[[蜂窝网络]]或[[Wi-Fi]],可以进行[[电话呼叫|通话]]、[[网络浏览器|浏览网络]]、[[相机电话|拍照]]、[[便携式媒体播放器|播放音乐]],并发送和接收[[电子邮件]]和[[文字信息|文字信息]]。

预期结果:

iPhone有一个围绕多点触摸屏构建的用户界面。它可以连接到蜂窝网络或Wi-Fi,可以打电话、浏览网络、拍照、播放音乐以及收发电子邮件和短信。

我发现了这个答案,但在将其插入我的应用程序后,它删除了[[]]之间的所有文本,而不是[[|之间的文本。

使用上面的例子,这就是答案中的代码结果:

iPhone有一个围绕{remove}屏幕构建的{removed}。它连接到{removed}s或{removed},并且可以使{remove}、{removed}、{removed}和发送和接收{removed}s和{removed}。

这真的让我很困惑,有人能帮忙吗?谢谢

extension String {
func replacingOccurrencesHyperlinks() -> String {
let regExpr = "\[\[[^\]]+?\|(.+?)\]\]"
return replacingOccurrences(of: regExpr, with: "{removed}", options: .regularExpression)
}
} // this is the extension I use on the MediaWiki API result.

可能有一个更好的单行正则表达式解决方案,但我忘记了它是如何工作的,同时尝试打印Expected result:

func replacingOccurrencesHyperlinks() -> String {
return self.replacingOccurrences(of: "\[\[(?:[^\]|]*\|)", with: "", options: .regularExpression)
.replacingOccurrences(of: "[[", with: "")
.replacingOccurrences(of: "]]", with: "")
}

由Reddit上一个很棒的家伙解决。只需要用简单的with: "$1"替换扩展中的with: "{removed}"

最新更新