我在一个单元格中有以下字符串:
我想将字符串拆分成一个数组,该数组只包含文本单词(如'CRMNegocios'),没有任何符号、新行等.
为此,我编写了以下代码:
Sub Button1_Click()
Dim stringsToCheck As Variant
Dim element As Variant
Dim stripped As String
'Split cell value per vbLf
stringsToCheck = Split(Cells(42, 10).Value, vbLf)
MsgBox ("Total length of stringsToCheck is " & CStr(UBound(stringsToCheck)))
'Remove special characters - for testing only, it will set the cell with the last value of the array
For Each element In stringsToCheck
stripped = GetStrippedText(CStr(element))
Cells(42, 15) = stripped
Next element
End Sub
Private Function GetStrippedText(txt As String) As String
Dim regEx As Object
Set regEx = CreateObject("vbscript.regexp")
'\u0000-\u007F is for other special characters
regEx.Pattern = "[\u25A0\u00A0\u0000-\u007F]"
GetStrippedText = regEx.Replace(txt, "")
End Function
该项目如预期的那样被删除(它是\u25A0
),但我仍然保留在文本单词之前的\u00A0
字符:
我已经检查过和regex匹配,为什么它没有在VBA中删除?
如评论中所述,单元格中的原文:
■ CRMNegocios
■ GestiondeProyectos
■ Emblue
■ Videoconferencia
测试单元格中的文本,代码运行后:
成本-成本-商业
发布于 2017-04-25 12:40:19
我建议使用"^[\u25A0\u00A0\s]+"
删除所有的标准空格、不间断空格和要点。它符合:
^
-字符串的开始[\u25A0\u00A0\s]+
-1或更多次出现:\u25A0
-子弹点\u00A0
-非破缺空间\s
- [ \r\t\n\f]
空格
您的正则表达式不是全局匹配的,所以在匹配和删除第一个要点之后,它就停止了。然后,regex还包含定义所有ASCII字符的u0000-\u007F
范围。如果按原样使用,在Replace
中,它将从字符串中删除所有的ASCII字母、数字、所有ASCII符号。这就是为什么在添加.Global = True
以匹配所有事件时删除文本的原因。
请注意,如果您只处理ASCII文本,并且需要从字符串开始删除任何非单词字符,则可以使用regEx.Pattern = "^\W+"
(不需要将.Global
设置为True)。
https://stackoverflow.com/questions/43610513
复制相似问题