从字符串中删除方括号内的文本

时间:2018-10-01 16:09:43

标签: vba ms-access

我有在方括号之间包含文字的记录。

aaaaaa[aaaaa]

我需要删除该文本,包括方括号。

结果将是:

aaaaaa

我正在尝试以下代码:

Dim sqr as Integer
Dim origin as String
Dim result as String

InStr(origin,[)

我可以找到第一个方括号,但不能完成工作。

2 个答案:

答案 0 :(得分:1)

您需要计算方括号的索引-InStr(origin, "[")(请注意双引号)是一个好的开始。

现在,您可以使用Mid$函数从该索引循环到字符串的末尾,以检查当前索引处的字符,直到找到右括号为止。

Dim currentPosition As Long
currentPosition = InStr(origin, "[")
If currentPosition = 0 Then
    ' no opening bracket. now what?
Else
    Dim bracketedWord As String
    For currentPosition = currentPosition + 1 To Len(origin)
        If Mid$(origin, currentPosition, 1) <> "]" Then
            bracketedWord = bracketedWord & Mid$(origin, currentPosition, 1)
        Else
            'found the closing bracket: we're done.
            Exit For
        End If
    Next

End If

或者,您可以使用InStr来找到[左括号{em>和右括号]的位置,然后计算 length ,并使用Mid$函数拉出该子字符串而不循环。

或者,通过引用 Microsoft VBScript正则表达式5.5 ,您可以使用简单的正则表达式:

Public Function FindBracketedWord(ByVal value As String) As String
    Dim regex As RegExp
    Set regex = new RegExp
    regex.Pattern = "\[(\w+)\]" ' matches a square-bracketed "word", no spaces

    Dim matches As MatchCollection
    Set matches = regex.Execute(value)

    If matches.Count <> 0 Then result = matches(0).SubMatches(0)
    FindBracketedWord = result
End Function

答案 1 :(得分:1)

由于您提出的问题是您希望删除方括号内的文本(包括删除方括号),因此我建议以下内容:

Function RemoveSqBracketText(strStr As String) As String
    Dim lngId1 As Long
    Dim lngId2 As Long
    lngId1 = InStr(strStr, "[")
    lngId2 = InStr(strStr, "]")
    If lngId1 > 0 And lngId2 > 0 Then
        RemoveSqBracketText = Left(strStr, lngId1 - 1) & RemoveSqBracketText(Mid(strStr, lngId2 + 1))
    Else
        RemoveSqBracketText = strStr
    End If
End Function

这将递归删除方括号内的所有文本实例,并假定您仅希望删除在右方括号内的文本。

示例:

?RemoveSqBracketText("abc[123]")
abc

?RemoveSqBracketText("abc[123]def[ghi]")
abcdef

?RemoveSqBracketText("abc[123]defghi]")
abcdefghi]