这个问题在这里已有答案:
我从服务中收到了大量字符串,需要更改文本以提取和删除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]
。”预期的结果应该是:
我想我将使用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]
一些正则表达式大师可以帮助我吗?
尝试这种模式^([^[]+)\[([^:\]]+)[^\]]*\]([^[]+)\[\/\2\]
并用\1\3
替换它。
说明:
^
- 字符串的开头
([^[]+)
- 匹配除[
之外的一个或多个字符并存储在捕获组中
\[
- 字面上匹配[
([^:\]]+)
- 匹配:
或]
以外的一个或多个字符并存储在捕获组中
[^\]]*
- 匹配]
以外的零个或多个字符
\]
- 字面上匹配]
([^[]+)
- 匹配除[
之外的一个或多个字符并存储在捕获组中
\[\/
- 字面上匹配[/
\2
- 匹配第二个捕获组中匹配的相同文本(因此它匹配结束标记,如anchor
)
\]
- 字面上匹配]
知道了:)这个正则表达式适用于我的要求:\ [。*?\]
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)
使用以下代码获取预期输出。
斯威夫特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.