所以基本上我在vb.net中尝试做的是从字符串中删除多个嵌套括号和这些括号内的所有文本。如果在下面的第一个例子中只有一组括号我很容易做到,我只找到"("和")"的索引。然后使用str.remove(firstindex,lastindex)并保持循环直到所有括号都从字符串中删除。
const int *
但是,如果它们是字符串中的多个嵌套括号,我仍然无法弄清楚如何做到这一点。
str = "This (3) is(fasdf) an (asdas) Example"
Desired output:
str = "This is an example"
答案 0 :(得分:0)
这不是一个真正的教程网站,所以我不应该回答这个问题,但是我无法抗拒。
正如艾哈迈德所说,你可以使用Regex.Replace
,但我发现正则表达式复杂且难以理解。因此,其他人很难维持它。
以下代码有三个循环。只要字符索引小于字符串的长度,我们的循环While
循环就会运行两个内部循环。
第一个内循环搜索第一个"开括号"在一个组中并记录位置并将"开括号"的数量加1。 (深度)。随后的任何"开放括号"只需在括号中加1。这将持续到第一个循环找到"关闭括号"
然后第二个循环搜索相同数量的"关闭括号"从第一个"关闭括号"找到了。
当循环到达最后一个"关闭括号"在小组中,所有来自第一个"开放括号的字符"到最后"关闭括号"在组中被删除。如果当前索引位置不在更新的While
的末尾,则再次启动inputString
循环。
当While
循环结束时,将删除任何双空格,并从函数返回更新的输出字符串
Private Function RemoveBracketsAntContents(inputString As String) As String
Dim i As Integer
While i < inputString.Length
Dim bracketDepth As Integer = 0
Dim firstBracketIndex As Integer = 0
Do
If inputString(i) = "(" Then
If firstBracketIndex = 0 Then
firstBracketIndex = i
End If
bracketDepth += 1
End If
i += 1
Loop Until i = inputString.Length OrElse inputString(i) = ")"
If i = inputString.Length Then Exit While
Do
If inputString(i) = ")" Then
bracketDepth -= 1
End If
i += 1
Loop Until bracketDepth = 0
inputString = inputString.Remove(firstBracketIndex, i - firstBracketIndex)
i = i - (i - firstBracketIndex)
End While
inputString = inputString.Replace(" ", " ")
Return inputString
End Function