如何在模式中对包含其他文本的文本进行个性化处理,并使用正则表达式进行编辑



我正在学习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@@@

最新更新