仅替换 VBA 中字符串中最后一次出现的匹配项

问题描述 投票:0回答:4

我有一个这样的字符串

“C://Documents/TestUser/WWW/Help/Files/Move_Help.txt”

并且必须将

Move_Help.txt
替换为
Move_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_Help 与 Move_Job 匹配(Move_ 不是常量。它可以是任何字符串)

string vba excel replace
4个回答
20
投票

有一个单行解决方案:

rlpStr = StrReverse(Replace(StrReverse(str), StrReverse("Help"),  StrReverse("Job"), , 1))

从技术上讲,它比组合

InStr
Replace
的效率稍低,但如果需要,可以在另一个表达式中使用。另外,我喜欢单行解决方案,只要它们不难以理解。


5
投票

下面代码中的技术能满足您的要求吗?

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

0
投票

Str =“C://Documents/TestUser/WWW/Help/Files/Move_Help.txt”

ValueCrnt =“帮助” 新值=“工作”

Pos = InStrRev(Str, ValueCrnt)

如果 Pos > 0 那么 Str = Mid(Str, 1, Pos - 1) & 替换(Str, ValueCrnt, ValueNew, Pos) 结束如果

Wscript.Echo Str


0
投票

str =“C://Documents/TestUser/WWW/Help/Files/Move_Help.txt” rlpStr = 替换(str, 'Move_Help', 'Move_Job')

© www.soinside.com 2019 - 2024. All rights reserved.