【问题标题】:How to remove text between two strings, including identifiers?如何删除两个字符串之间的文本,包括标识符?
【发布时间】:2018-04-19 19:53:32
【问题描述】:

我需要删除两个字符串之间的文本。
文本示例如下:

Abc%678x”cv ","@metadata":{abxkl "DataArray"}},{"columnName":"

要求是从,"@met"} 开始删除文本

要求是使用,"@met"} 作为开始和结束标识符,并删除它们之间的文本,包括标识符。

文件中可能多次出现此开始和结束标识符。

输出应如下所示:

Abc%678x”cv "},{"columnName":"

如何编写 Excel 公式或简单的 VBA 脚本来删除两个字符串之间的文本,包括标识符?

【问题讨论】:

    标签: excel excel-formula excel-2010 excel-2007 vba


    【解决方案1】:

    公式:

    =LEFT(A1,FIND(",""@met",A1)-1)&RIGHT(A1,LEN(A1)-FIND("}",A1,FIND("""@met",A1)))
    

    VBA 函数:

    Function RemoveBetweenSeparators( _
        ByVal MyString As String, _
        ByVal SepL As String, _
        ByVal SepR As String) _
        As String
    
        Dim sL As String
        Dim sR As String
    
        sL = Split(MyString, SepL)(0)
        sR = Replace(MyString, sL, "")
        sR = Replace(sR, Split(sR, SepR)(0) & SepR, "")
    
        RemoveBetweenSeparators = sL & sR
    End Function
    

    可以这样使用:

    =RemoveBetweenSeparators(A1,"""@meta","}")
    

    编辑:我也错过了“多次出现”的要求,第一次!这让它有点棘手,但试试这个:

    Function RemoveBetweenSeparatorsMultiple( _
        ByVal MyString As String, _
        ByVal SepL As String, _
        ByVal SepR As String) _
        As String
    
        Dim sOut As String
        Dim sL As String
    
        Do Until InStr(MyString, SepL) = 0
            sL = Split(MyString, SepL)(0)
            sOut = sOut & sL
            MyString = Replace(MyString, sL & SepL, "", 1, 1)
            sL = Split(MyString, SepR)(0)
            MyString = Replace(MyString, sL & SepR, "", 1, 1)
        Loop
    
        RemoveBetweenSeparatorsMultiple = sOut & MyString
    
    End Function
    

    【讨论】:

    • 谢谢,我正在运行几个测试用例,很快就会更新。
    • 嗨 Olly,我想将 SepL 的输入参数值传递为 ,"@meta 你能告诉我如何在参数值中添加逗号 (,) 前缀吗? =RemoveBetweenSeparators(A1," ,""@meta","}") 返回错误。
    • 该公式适用于我,您在问题中发布的文本字符串。有关工作示例,请参阅 excel.solutions/wp-content/uploads/2017/11/so1711pk.xlsm
    【解决方案2】:

    抱歉,没有注意到可能会出现多次。我稍后会编辑我的答案。

    假设原始文本存储在A1中。

    A2=LEFT(A1,FIND(",""@met",A1)-1)&RIGHT(A1,LEN(A1)-FIND("""}",A1)-1)

    注意:如果需要强制 excel 将双引号视为普通文本,则必须键入两个 " 来表示 "

    如果可能出现多次,试试这个

    Private Function RemoveText(ByVal tgtString As String, ByVal StartText As String, ByVal EndText As String) As String
        Do While InStr(1, tgtString, StartText) > 0
            tgtString = Left(tgtString, InStr(1, tgtString, StartText) - 1) & Right(tgtString, Len(tgtString) - InStr(1, tgtString, EndText) - 1)
        Loop
    
        RemoveText = tgtString
    End Function
    
    Private Sub test()
        'remove certain string in A1 and store the result in A2
        Range("A2").Value = RemoveText(Range("A1").Value, ",""@met", """}")
    End Sub
    

    【讨论】:

    • 谢谢,我会尽快尝试恢复。
    【解决方案3】:

    可能是这样的(虽然没有测试!):

        Function cleanedStr (inpStr as String; beginDel as string; endDel as Str) as String
        Dim idx     as long
        Dim take    as boolean
        Dim outStr  as String
        Dim myCh    as String
    
            take = true
            outStr = ""
            for idx = 1 to len(inpStr)
                myCh = mid(inpStr, idx, 1)
                if myCh = beginDel then take = false
                if take then 
                    outStr = outStr & myCh
                else
                    if myCh = endDel then take = true
                end if
            next idx        
            cleanedStr = outStr    
        end Function
    

    请注意,开始标识符只有 1 个字符。
    beginDel 是@,endDel 是 }

    【讨论】:

      【解决方案4】:

      这可以使用 VBA 和正则表达式轻松完成:

      Option Explicit
      Function RemoveBetweenDelimiters(S As String) As String
          Dim RE As Object
      
      Set RE = CreateObject("vbscript.regexp")
      With RE
          .Global = True
          .ignorecase = True
          .Pattern = ",""@met[^}]+}"
          RemoveBetweenDelimiters = .Replace(S, "")
      End With
      
      End Function
      

      正则表达式解释:

      ,"@met[^}]+}

      ,"@met[^}]+}
      

      选项:不区分大小写; ^$ 匹配换行符

      使用RegexBuddy创建

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-24
        • 2015-11-10
        • 1970-01-01
        • 2017-12-04
        • 2017-12-03
        • 2016-07-01
        • 1970-01-01
        相关资源
        最近更新 更多