我正在寻找excel 2007的正则表达式,它可以替换字符串末尾的 -3 的所有实例,替换它绝对没有(删除它)。整个字符串中有-3个实例,但是我只需要删除最后的字符串。这被集成到宏中,因此首选使用单个正则表达式进行查找和替换。
答案 0 :(得分:1)
请尝试以下方法: -
根据OP的评论进行编辑:
Sub mymacro()
Dim myString as String
//'--do stuff
//'-- you could just do this or save the returning
//'-- string to another string for further processing :)
MsgBox replaceAllNeg3s(myString)
End Sub
Function replaceAllNeg3s(ByRef urstring As String) As String
Dim regex As Object
Dim strtxt As String
strtxt = urstring
Set regex = CreateObject("VBScript.RegExp")
With regex
//'-- replace all -3s at the end of the String
.Pattern = "[(-3)]+$"
.Global = True
If .test(strtxt) Then
//'-- ContainsAMatch = Left(strText,Len(strText)-2)
//'-- infact you can use replace
replaceAllNeg3s = Trim(.Replace(strText,""))
Else
replaceAllNeg3s = strText
End If
End With
End Function
//'-- tested for
//'-- e.g. thistr25ing is -3-3-3-3
//'-- e.g. 25this-3stringis25someting-3-3
//'-- e.g. this-3-3-3stringis25something-5
//'-- e.g. -3this-3-3-3stringis25something-3
答案 1 :(得分:1)
您可以使用VBA的Regex
功能在没有Instr
的情况下执行此操作。这是代码:
Sub ReplaceIt()
Dim myRng As Range
myRange = Range("A1") ' change as needed
If InStr(Len(myRange.Text) - 2, myRange.Text, "-3") > 0 Then
myRange.Value = Left(myRange, Len(myRange) - 2)
End If
End Sub
更新
根据Juri在下面的评论,将If语句改为this也会有效,而且它更清晰。
If Right (MyRange, 2) = "-3" Then MyRange=Left(MyRange, Len(MyRange)-2)
答案 2 :(得分:1)
除非它是更大宏的一部分,否则这里不需要VBA!只需使用此公式即可获得结果:
=IF(RIGHT(A1,2)="-3",LEFT(A1,LEN(A1)-2),A1)
(假设您的文字位于单元格A1
)