如何使用正则表达式在VBA中将多个空格替换为单个空格?

6

我有一个账单需要在使用SQL进行处理之前进行清理。我已经使用了正则表达式模式来删除任何标点符号,但我认为我也可以使用它来匹配单词之间的过多空格,但是我在VBA脚本中的替换部分遇到了问题。

到目前为止,我的代码是:

   Sub RemoveSpace()
Dim cell As Range
Range("A2:C2").Select
Range(Selection, Selection.End(xlDown)).Select

With CreateObject("vbscript.regexp")
  .Pattern = "[\s{2,0}]"
  .Global = True
  For Each cell In Selection.SpecialCells(xlCellTypeConstants)
    cell.Value = .Replace(cell.Value, " ")
  Next cell
End With
End Sub

尽管此脚本匹配空格,但它不会将其替换为单个空格。我认为Excel将每个匹配的单个空格替换为另一个空格,而不是将多个空格视为“一个”。有没有办法去除所有多个空格并将它们替换为单个空格?

谢谢,那个完美地解决了!你能解释一下为什么去掉零和方括号会有所不同吗? - marineninjas
\s{2,0}是一个无效的模式,请尝试在https://regex101.com上验证。 - Wiktor Stribiżew
2个回答

5

[\s{2,0}]模式匹配任何单个空格、{2,0}字符,因为它们都在字符类[...]内。请参阅字符类参考。

一旦您删除了[...],您还需要删除0,因为您需要{2,}来匹配2个或更多的出现。请参阅限定量词参考。

使用:

.Pattern = "\s{2,}"

查看正则表达式演示


0
接受的答案对于多行字符串无效,因为它也会去除换行符。
如果你只想去除多余的空格,就像问题标题一样,请使用以下方法:
''' Replace multiples spaces with one, because one is enough.
Public Function CrushSpaces(ByVal text As String) As String
    With CreateObject("VBScript.RegExp")
        .Pattern = " {2,}"
        .Global = True
        .MultiLine = True
        
        CrushSpaces = .Replace(text, " ")
    End With
End Function

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接