正则表达式删除Swift中String中的链接[重复]

问题描述 投票:-1回答:3

这个问题在这里已有答案:

我从服务中收到了大量字符串,需要更改文本以提取和删除3种类型的链接,如下所述

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

来自服务的示例全长文本:

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

预期的结果应该是:

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

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

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]

一些正则表达式大师可以帮助我吗?

ios swift regex macos nsregularexpression
3个回答
1
投票

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

并用\1\3替换它。

说明:

^ - 字符串的开头

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

\[ - 字面上匹配[

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

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

\] - 字面上匹配]

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

\[\/ - 字面上匹配[/

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

\] - 字面上匹配]

Demo


0
投票

知道了:)这个正则表达式适用于我的要求:\ [。*?\]

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)

0
投票

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

斯威夫特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.

斯威夫特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.
© www.soinside.com 2019 - 2024. All rights reserved.