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

时间:2018-04-10 10:43:44

标签: regex excel vba

我在使用SQL之前需要清理一个帐户语句。我使用RegEx模式删除任何标点符号,并认为我也可以使用它来匹配单词之间过多的空格,但我在使用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将其匹配的每个单独空间替换为另一个空格而不是将多个空格视为"一个"。有没有办法可以删除所有的多个空格并用一个空格替换它们?

1 个答案:

答案 0 :(得分:1)

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

删除[...]后,您还需要删除0,因为您需要{2,}才能匹配2次或更多次匹配。请参阅limiting quantifier参考。

使用

.Pattern = "\s{2,}"

请参阅regex demo