String 仅替换VBA中字符串中最后出现的匹配项
我有一根这样的绳子 “C://Documents/TestUser/WWW/Help/Files/Move_Help.txt” 并且必须将String 仅替换VBA中字符串中最后出现的匹配项,string,vba,excel,replace,String,Vba,Excel,Replace,我有一根这样的绳子 “C://Documents/TestUser/WWW/Help/Files/Move_Help.txt” 并且必须将Move\u Help.txt替换为Move\u Job.txt 我在VBA EXCEL中使用以下代码 str = "C://Documents/TestUser/WWW/Help/Files/Move_Help.txt" rlpStr = Replace(str, 'Help', 'Job') 我越来越 "C://Documents/TestUser/WW
Move\u Help.txt
替换为Move\u Job.txt
我在VBA EXCEL中使用以下代码
str = "C://Documents/TestUser/WWW/Help/Files/Move_Help.txt"
rlpStr = Replace(str, 'Help', 'Job')
我越来越
"C://Documents/TestUser/WWW/Job/Files/Move_Job.txt"
期望
"C://Documents/TestUser/WWW/Help/Files/Move_Job.txt"
你能帮个忙吗
仅供参考:我无法将Move\u Help与Move\u Job匹配(Move\u不是常量。它可以是任何字符串)下面代码中的技术是否满足您的要求 Str的初始值为:
C://Documents/TestUser/WWW/Help/Files/Move_Help.txt
最终值为:
C://Documents/TestUser/WWW/Help/Files/Move_Job.txt
代码使用InStrRev
定位上次出现的ValueCrnt
,如果有,如果出现ValueCrnt
,它将用ValueNew
替换最后出现的值
Option Explicit
Sub Demo()
Dim Pos As Long
Dim Str As String
Dim ValueCrnt As String
Dim ValueNew As String
Str = "C://Documents/TestUser/WWW/Help/Files/Move_Help.txt"
ValueCrnt = "Help"
ValueNew = "Job"
Pos = InStrRev(Str, ValueCrnt)
If Pos > 0 Then
Str = Mid(Str, 1, Pos - 1) & Replace(Str, ValueCrnt, ValueNew, Pos)
End If
Debug.Print Str
End Sub
有一种单线解决方案:
rlpStr = StrReverse(Replace(StrReverse(str), StrReverse("Help"), StrReverse("Job"), , 1))
从技术上讲,它的效率略低于组合InStr
和Replace
,但如果需要,可以在另一个表达式中使用它。此外,我喜欢单线解决方案,只要它们不令人费解。Str=“C://Documents/TestUser/WWW/Help/Files/Move\u Help.txt”
ValueCrnt=“帮助”
ValueNew=“作业”
Pos=InStrRev(Str,ValueCrnt)
如果位置>0,则
Str=Mid(Str,1,位置-1)和替换(Str,ValueCrnt,ValueNew,位置)
如果结束
Wscript.Echo Str下划线是否一致?如果是这样,您可以使用
rlpStr=Replace(str,“\u Help”,“\u Job”)
。它不是。它可以是任何字符。请添加一些关于代码含义的解释,而不是只发布代码答案。