excel正则表达式结束

时间:2013-01-02 18:32:19

标签: regex vba excel-vba replace excel

我正在寻找excel 2007的正则表达式,它可以替换字符串末尾的 -3 的所有实例,替换它绝对没有(删除它)。整个字符串中有-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