在 Swift 中删除字符串中的链接的正则表达式 [重复]

Posted

技术标签:

【中文标题】在 Swift 中删除字符串中的链接的正则表达式 [重复]【英文标题】:Regular expression to remove link in String in Swift [duplicate] 【发布时间】:2019-08-31 11:45:02 【问题描述】:

我有一堆从服务收到的字符串,需要更改文本以提取和删除下面提到的 3 种类型的链接

anchor - [anchor:info]Account Details[/anchor]
action -  [action:contact]Contact info[/anchor]
link-to - [link-to:register]Create An Account[/link-to]

来自服务的完整长度文本示例:

    “您的[anchor:info]Account Details[/anchor] 有问题。” “您的[anchor:rewards]Sign Up For Rewards[/anchor] 有问题。” “我们无法识别此帐户。请重新输入您的电子邮件或[link-to:register]Create An Account[/link-to]。”

而预期的结果应该是:

    “您的帐户详细信息有问题。” “您的注册奖励有问题。” “我们无法识别此帐户。请重新输入您的电子邮件或创建一个帐户。”

我想我会使用 replaceOccurrences 函数来实现这一点。但是我还没有破解我所需格式的正则表达式。

let aString = "There's a problem with your [anchor:info]Account Details[/anchor]."
let newString = aString.replacingOccurrences(of: "regex here", with: " ", options: .regularExpression, range: nil)

我可以有 3 个单独的正则表达式来匹配这 3 个案例,或者有一个可以处理以下情况的正则表达式:

[any_link_type:any_identifier]Any Text[/any_link_type]

一些正则表达式专家可以帮助我吗?

【问题讨论】:

【参考方案1】:

知道了 :) 这个正则表达式可以满足我的要求:\[.*?\]

let linkString = "We didn't recognize this account. Please re-enter your email or [link-to:register]Create An Account[/link-to]."

let newLinkString = linkString.replacingOccurrences(of: "\\[.*?\\]", with: "", options: .regularExpression, range: nil)

【讨论】:

【参考方案2】:

试试这个模式^([^[]+)\[([^:\]]+)[^\]]*\]([^[]+)\[\/\2\]

并将其替换为\1\3

解释:

^ - 字符串的开头

([^[]+) - 匹配除[ 之外的一个或多个字符并存储在捕获组中

\[ - 匹配 [ 字面意思

([^:\]]+) - 匹配除:] 之外的一个或多个字符并存储在捕获组中

[^\]]* - 匹配除]之外的零个或多个字符

\] - 匹配 ] 字面意思

([^[]+) - 匹配[以外的一个或多个字符并存储在捕获组中

\[\/ - 匹配 [/ 字面意思

\2 - 匹配第二个捕获组中匹配的相同文本(因此它匹配结束标记,如anchor

\] - 匹配 ] 字面意思

Demo

【讨论】:

【参考方案3】:

使用以下代码获得预期的输出。

Swift 4:-

let aString = "There's a problem with your [anchor:info]Account Details[/anchor]."
let newString = aString.replacingOccurrences(of: "\\[.*?\\]", with: "", options: .regularExpression, range: nil)
print(newString) //There's a problem with your Account Details.

Swift 5:-

let aString = "There's a problem with your [anchor:info]Account Details[/anchor]."
let newString = aString.replacingOccurrences(of: #"\[.*?\]"#, with: " ", options: .regularExpression, range: nil)
print(newString) //There's a problem with your Account Details.

【讨论】:

以上是关于在 Swift 中删除字符串中的链接的正则表达式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法让 Swift 中的正则表达式匹配“不包含”

如何在 MySQL 中使用正则表达式删除 href 属性中的所有空格

如何使用正则表达式删除字符串中的括号符号

删除正则表达式中的 Html 标签 [重复]

(php) 正则表达式删除注释但忽略字符串中的出现

在Java中的正则表达式匹配后删除部分字符串