繁体   English   中英

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

[英]VBA Exclude special characters and numbers but keep spaces from string

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

我需要删除“ 24”和“-”,但保留所有字母和空格。

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

End Function

我本来希望使用正则表达式而不是此循环,但是当我发现许多其他语言的示例时,我并没有弄清楚该正则表达式可以与VBA一起使用。

任何正则表达式建议都是欢迎的,但是我也想知道为什么我的循环表现不如预期。

使用像这样的简单正则来保留您想要的字符(即,删除任何不是azAZ或空格的字符)

更新:编辑制作,以取代-" "之前,正则表达式剥离

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

您将需要添加一个引用的正则表达式库看到

试试这个模式

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM