gpt4 book ai didi

regex - 如何隔离嵌套的括号?

转载 作者:行者123 更新时间:2023-12-01 07:47:37 27 4
gpt4 key购买 nike

假设我有以下句子:

This is a (string) with lots of (brackets) and (to make ((the fun) complete) some are) even nested. 

我需要一种简单的方法来隔离所有内括号,因为我需要用大括号替换它们。于是这个字符串就变成了如下

This is a (string) with lots of (brackets) and (to make {{the fun} complete} some are) even nested.

理论上,这意味着我需要一个正则表达式,它在第一轮选择所有左括号之前有另一个左括号,并在下一轮选择所有右括号后跟另一个右括号。这样我就可以使用正则表达式替换来用大括号替换圆角。

但我一直在挣扎...我尝试过类似的方法,但显然行不通,有什么建议吗?

(?<=\([^()]*)\(

[编辑]

好吧,实际上我设法让它工作了(顺便说一句,使用 VBA),但纯粹主义者可能不会留下深刻印象,所以任何关于改进的建议总是受欢迎的。我采取了两步法,首先我将每个左括号替换为另一个左括号,然后将其替换为 curl 的。然后,我将右括号前面的花括号替换为结束花括号。这个我循环......最后工作正常,但当然只有在其他地方没有使用 curl 的情况下

Sub testMyFunc()
Call replaceNestedBrackets("This is a (comment in a) string folowed by a (nested and (more (complex)) with (blabla)) comment")
End Sub



Function replaceNestedBrackets(s As String) As String

Dim regEx As New RegExp
regEx.Global = True
Dim colregmatch As MatchCollection
Dim r1, r2 As String
r1 = "{"
r2 = "}"

regEx.Pattern = "(.*\([^)]*)(\()(.*)"

Set colregmatch = regEx.Execute(s)
If colregmatch.Count > 0 Then
s = colregmatch.Item(0).SubMatches.Item(0) & r1 & colregmatch.Item(0).SubMatches.Item(2)

regEx.Pattern = "([^{]*{[^\)]*)(\))(.*)"
Set colregmatch = regEx.Execute(s)
s = colregmatch.Item(0).SubMatches.Item(0) & r2 & colregmatch.Item(0).SubMatches.Item(2)

replaceNestedBrackets (s)
End If
replaceNestedBrackets = s

Debug.Print replaceNestedBrackets
End Function

最佳答案

尝试

(\([^()]*)\(([^()]*)\)

替换为 \1{\2}。这将从内到外替换括号,因此您必须应用它直到它不再匹配。

See demo.

关于regex - 如何隔离嵌套的括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26169069/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com