从string中的第一个单词中删除最后一个字符

我正在使用RegEx来searchstring

If RegExp.test(Cel.Value) Then Debug.Print Left$(Cel.Value, Len(Cel.Value) - 1) End If 

这是我的数据

 3250A WEST SEM 110055K KEALY RD 804B WEST AMERICA 804 EAST AMERICA 

结果应该是

 3250 WEST SEM 110055 KEALY RD 804 WEST AMERICA 804 EAST AMERICA 

删除最后一个字符的最佳方法是什么?

你可以试试这个:

 ^(\d+)[a-zA-Z]*(\s+.*)$ 

并由此取代:

 $1$2 

演示

你可以使用这个正则expression式:

 (\d+)(\w{1})(\s.+) 
  • (\d+) – 捕获一个或多个数字
  • (\w{1}) – 捕获一个你想删除的字母 – 如果你有例子123XX SOMEWHERE然后捕获XX你会使用(\w+)(\w{1,2})如果你认为会有1或2个字符后面的数字。
  • (\s.+) – 捕捉任何东西后面的空格

当你想replace你只是想删除第二个匹配组( (\w{1}) )并join第一个和第三个 – 因此下面的Replace函数$1$3

 strReplaced = objRegex.Replace(CStr(varTest), "$1$3") 

示例VBA代码

 Option Explicit Sub Test() Dim objRegex As Object Dim varTests As Variant Dim varTest As Variant Dim strPattern As String Dim strReplaced As String varTests = Array("3250A WEST SEM", "110055K KEALY RD", "804B WEST AMERICA") strPattern = "(\d+)(\w{1})(\s.+)" Set objRegex = CreateObject("VBScript.Regexp") objRegex.Pattern = strPattern For Each varTest In varTests strReplaced = objRegex.Replace(CStr(varTest), "$1$3") MsgBox strReplaced Next varTest End Sub 

正则expression式的花式图:

在这里输入图像描述

RegEx场景 – 如果您可以在string的开头find<some numbers> <single letter> <single space> ,则将模式更改为<单个字母> <单个空格> ,并用一个空格replace它。

 Option Explicit Sub stripAlphaSuffix() Dim i As Long, regex As Object Set regex = CreateObject("VBScript.RegExp") With Worksheets("Sheet1") For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row With regex .Global = False .MultiLine = False .IgnoreCase = False .Pattern = "^[0-9A-Z ]{3,8}" End With If regex.Test(.Cells(i, "A").Value2) Then regex.Pattern = "[AZ ]{2}" .Cells(i, "A") = regex.Replace(.Cells(i, "A").Value2, Chr(32)) End If Next i End With End Sub 

只是抛出一个非RegEx解决scheme:

 Dim cel As Range Dim word As String For Each cel In Range("A1", Cells(Rows.Count, 1).End(xlUp)) word = Split(cel, " ")(0) cel.Value = Replace(cel.Value, word, Left(word, Len(word) - 1)) Next 

由于VAL剥离了以数字开头的字母数字string的非数字,所以你可以试试这个(它不假定总是有一个字符被replace)

VAL("3250A") = 3250

会更优雅,如果它不需要附加string的其余部分:)

 Dim StrIn As String Dim X StrIn = "3250A WEST SEM" X = Split(StrIn, Chr(32)) MsgBox Val(StrIn) & Right$(StrIn, Len(StrIn) - Len(X(0)))