从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)))
- Excel VBA正则expression式删除主要的数字,期间和空间?
- VBA + RegEx + Range.Replace
- Pentaho Filter正则expression式Excelinput
- 使用embedded式dobule引号和逗号对单个RegExexpression式进行解码
- 在string中find一个模式,并从excel单元格中移除该string的模式,而不用触及string中的模式
- 正则expression式来validationExcel单元格
- 使用正则expression式查找并replacestring中模式的所有实例
- 列出不同范围内的所有数字(1 – 6; 1,2,5和23等)
- 如果相邻单词以相同的字母开头,则用“/”replace空格,否则用“&”ExcelmacrosVBAreplace