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

How can I individuate the text that encloses some other text in a pattern and edit it with regex

我正在学习正则表达式,我正在尝试创建一个替换特定模式的程序。

给定以下字符串:
@@@你好@!

我要识别“@@@”和“@!”并替换为“***”和“*^”。这些字符之间的内容必须保持原样。

现在,我尝试了类似的方法:

text.replacingOccurrences(of: #"(@@@)"#, with: "***", options: .regularExpression)
text.replacingOccurrences(of: #"(@!)"#, with: "*^", options: .regularExpression)

但如果我的字符串是:

"@@@hello@! @@@hello@@@"

我的输出变成:

"**hello^ hello"

而所需的应该是:

"**hello^ @@@hello@@@"

事实上,我只希望字符在符合以下模式时被替换:

@@@ some text @!

我创建了一个具有以下模式的正则表达式:
#"(@@@)(?:\.*?)(@!)"#

但我无法获取文本并替换它。
我怎样才能个性化包含模式中其他文本的文本并对其进行编辑?

您可以使用

text = text.replacingOccurrences(of: #"(?s)@@@(.*?)@!"#, with: "****^", options: .regularExpression)

regex demo详情:

  • (?s) - 使 . 匹配任何字符的内联“单行”标志
  • @@@ - 左手定界符
  • (.*?) - 捕获第 1 组(</code> 指的是这个值):尽可能少的任何零个或多个字符</li> <li><code>@! - 右手定界符。

Swift 测试:

let text = "@@@hello@! @@@hello@@@"
print(text.replacingOccurrences(of: #"(?s)@@@(.*?)@!"#, with: "****^", options: .regularExpression))
// -> ***hello*^ @@@hello@@@