Excel VBA中无需正则表达式移除字符串括号及内容的方法
VBA中移除字符串括号及内容的通用方法
VBA自带的Replace函数不支持通配符匹配,你写的Replace(feederType, "(*)", "")会把"(*)"当成精确字符串去匹配,自然没法替换括号里的内容。如果要实现通用的括号及内容移除,有两种靠谱的方案:
方案一:使用正则表达式(推荐)
正则可以轻松匹配任意位置的括号及内部内容,代码示例如下:
Function RemoveBracketedText(inputStr As String) As String Dim regEx As Object Set regEx = CreateObject("VBScript.RegExp") With regEx .Global = True ' 匹配所有符合条件的内容,而非仅替换第一个 .Pattern = "\(.*?\)" ' 匹配括号及括号内任意内容,非贪婪模式避免多括号嵌套问题 End With RemoveBracketedText = regEx.Replace(inputStr, "") End Function
调用时直接替换原有代码里的feederCode赋值逻辑:
Set feederType = Cells(i, 5) feederCode = RemoveBracketedText(CStr(feederType.Value)) feederID = getFeeder(feederCode).ID
方案二:自定义非正则函数
如果不想依赖正则,也可以用纯VBA逻辑实现:
Function RemoveBracketsManual(inputStr As String) As String Dim openPos As Integer, closePos As Integer Dim tempStr As String tempStr = inputStr openPos = InStr(tempStr, "(") Do While openPos > 0 closePos = InStr(openPos, tempStr, ")") If closePos > 0 Then tempStr = Left(tempStr, openPos - 1) & Mid(tempStr, closePos + 1) Else Exit Do ' 遇到无闭合的括号,直接终止循环 End If openPos = InStr(tempStr, "(") Loop RemoveBracketsManual = tempStr End Function
这个函数会循环查找所有括号对,逐一移除括号及内部内容,同样适用于任意位置的括号场景。
你之前用InStr()和Left()只能处理括号在末尾的情况,上面两种方法可以覆盖所有括号位置的需求。
内容的提问来源于stack exchange,提问作者Alexander Deis
相关产品推荐
相关产品推荐

