【问题标题】:VB.Net Remove Multiple parentheses and text within from stringsVB.Net 从字符串中删除多个括号和文本
【发布时间】:2018-03-26 22:09:38
【问题描述】:

所以基本上我在 vb.net 中尝试做的是从字符串中删除多个嵌套括号以及这些括号内的所有文本。如果只有一组括号,就像下面的第一个示例一样,这很容易做到已从字符串中删除。

str = "This (3) is(fasdf) an (asdas) Example"

Desired output:
str = "This is an example"

但是,如果它们是字符串中的多个嵌套括号,我仍然不知道该怎么做。

str = "This ((dsd)sdasd) is ((sd)) an (((d))) an example"

Desired Outcome:
str = "This is an example"

【问题讨论】:

  • 找到第一个结束括号 :) (即先找到这个')')
  • This 应该会有所帮助。您需要使用Regex.Replace
  • 找到第一个“(”。继续,如果找到“)”,则删除两者并继续。如果你找到另一个“(”,跳过下一个“)”并删除之后的一个,否则如果你找到另一个“(”,跳过另一个“)”并删除之后的一个,以此类推......

标签: vb.net


【解决方案1】:

这不是一个真正的教程网站,所以我不应该回答这个问题,但我无法抗拒。

正如 Ahmed 所说,您可以使用 Regex.Replace,但我发现正则表达式复杂且难以理解。所以别人很难维护。

以下代码有三个循环。我们的循环,一个While 循环,只要字符索引小于字符串的长度,就会运行两个内部循环。

第一个内部循环搜索组中的第一个“开括号”并记录位置并将“开括号”的数量(深度)加1。任何后续的“开括号”只会将括号数加 1。这一直持续到第一个循环找到“右括号”

然后第二个循环从找到第一个“右括号”的那一点开始搜索相同数量的“右括号”。

当循环到达组中的最后一个“右括号”时,从组中的第一个“左括号”到最后一个“右括号”的所有字符都被删除。如果当前索引位置不在更新后的inputString 的末尾,则While 循环再次开始。

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

【讨论】:

  • 感谢所有回复,我能够使用 Regex.Replace 和在线正则表达式生成器解决我的问题。
猜你喜欢
  • 1970-01-01
  • 2014-08-02
  • 2019-04-13
  • 1970-01-01
  • 2018-08-16
  • 2012-03-16
  • 1970-01-01
相关资源
最近更新 更多