【问题标题】:How to replace multiple spaces in VBA with a single space using regex?如何使用正则表达式用单个空格替换 VBA 中的多个空格?
【发布时间】:2018-09-19 22:53:29
【问题描述】:

我有一个需要在使用 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 将其匹配的每个单个空格替换为另一个空格,而不是将多个空格视为“一个”。有没有办法可以删除所有多个空格并用单个空格替换它们?

【问题讨论】:

  • 谢谢,效果很好!你能解释一下为什么去掉零和方括号会有所不同吗?
  • 见下文。另外,\s{2,0} 是无效模式,请在 regex101.com 尝试一下

标签: regex excel vba


【解决方案1】:

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

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

使用

.Pattern = "\s{2,}"

请参阅regex demo

【讨论】:

    猜你喜欢
    • 2013-09-21
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2021-07-04
    • 2011-11-18
    相关资源
    最近更新 更多