我有在方括号之间包含文字的记录。
aaaaaa[aaaaa]
我需要删除该文本,包括方括号。
结果将是:
aaaaaa
我正在尝试以下代码:
Dim sqr as Integer
Dim origin as String
Dim result as String
InStr(origin,[)
我可以找到第一个方括号,但不能完成工作。
答案 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 这两个位置之间的子字符串em>,并使用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]