我正在学习regex,并试图创建一个替换特定模式的程序。
给定以下字符串:
@@@hello@!
我想认识"@@@"one_answers"@"并用"***"代替它们以及"*^&";。这些字符之间的内容必须保持原样。
现在,我尝试了一些类似的东西:
text.replacingOccurrences(of: #"(@@@)"#, with: "***", options: .regularExpression)
text.replacingOccurrences(of: #"(@!)"#, with: "*^", options: .regularExpression)
但是如果我的字符串是:
"@@你好@@@@你好@@">
我的输出变成:
"*你好^你好";
而所需的应该是:
"*你好^@@@hello@@">
事实上,我只希望字符在遵循以下模式时被替换:
@@@一些文本@!
我创建了一个具有以下模式的正则表达式:#"(@@@)(?:\.*?)(@!)"#
但我无法获取文本并替换它。
如何对以模式包含其他文本的文本进行个性化处理并进行编辑?
您可以使用
text = text.replacingOccurrences(of: #"(?s)@@@(.*?)@!"#, with: "***$1*^", options: .regularExpression)
请参阅regex演示详细信息:
- CCD_ 2-内联";单线";使
.
与任何字符匹配的标志 @@@
-左侧分隔符(.*?)
-捕获组1($1
指该值(:任何零个或多个尽可能少的字符@!
—右侧分隔符
快速测试:
let text = "@@@hello@! @@@hello@@@"
print(text.replacingOccurrences(of: #"(?s)@@@(.*?)@!"#, with: "***$1*^", options: .regularExpression))
// -> ***hello*^ @@@hello@@@