VBA排除特殊字符和数字,但保留string的空格

我在excel单元格中有文本“abcd 24 ef-gh”。

我需要摆脱“24”和“ – ”,但保留所有的字母和空格。

我有一个函数循环遍历文本,并使用类似的运算符标识字母。 出于某种原因,它不排除我在循环之前添加replace语句的“24”和“ – ”:

Function StripNonAlpha(TextToReplace As String) As String Dim i As Integer Dim a, b, c As String a = Replace(TextToReplace, "-", " ") For i = 1 To Len(a) b = Mid(a, i, 1) If b Like "[AZ,az, ]" Then c = c & b End If Next i StripNonAlpha = c End Function 

我会喜欢使用正则expression式,而不是这个循环,但我没有找出用VBA的正则expression式,当我发现了很多其他语言的例子。

任何正则expression式的build议是受欢迎的,但我也想知道为什么我的循环不像预期的那样。

使用这样一个简单的正则expression式来保持你想要的字符(即删除任何不是azAZ或空格)

更新:在正则expression式剥离之前用" "replace

 Function StripNonAlpha(TextToReplace As String) As String Dim ObjRegex As Object Set ObjRegex = CreateObject("vbscript.regexp") With ObjRegex .Global = True .Pattern = "[^a-zA-Z\s]+" StripNonAlpha = .Replace(Replace(TextToReplace, "-", Chr(32)), vbNullString) End With End Function 

你将需要添加一个参考正则expression式库看到这一点

试试这个模式

  regEx.Pattern = "(\w\w\w\w)\s\d\d\s(\w\w)\D(\w\w)" 

这会给你三个分组abcd,然后你就可以使用了。 希望这可以帮助!