我试图删除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}"
!