VBA排除特殊字符和数字但保留字符串空格

时间:2013-12-23 01:56:12

标签: regex excel vba excel-vba

我有文字" abcd 24 ef-gh"在一个excel细胞中。

我需要摆脱" 24"和" - "但保留所有字母和空格。

我有一个循环文本的函数,并使用like运算符识别字母。出于某种原因,它并没有排除" 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 "[A-Z,a-z, ]" Then
        c = c & b
    End If
Next i
StripNonAlpha = c

End Function

我本来希望使用正则表达式而不是这个循环,但是当我发现很多其他语言的例子时,我并没有弄清楚要用于VBA的正则表达式。

欢迎任何正则表达式建议,但我也想知道为什么我的循环没有按预期运行。

2 个答案:

答案 0 :(得分:5)

使用这样的简单来保留您想要的字符(即删除任何非a-zA-Z或空格的内容

更新:在regexp剥离之前编辑用-替换" "

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

答案 1 :(得分:1)

您需要添加对Regex资源库的引用,请参阅this

尝试这种模式

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

这将为您提供三个分组,然后您可以使用它们。希望这有帮助!