使用Regex在VBA中用换行符替换空格

时间:2018-01-21 10:55:43

标签: regex vba replace

我有以下字符串:

ABCD1234  ABCD1234

我想用换行符替换双倍空格,但保留空格后的任何文本

以下是我正在尝试的内容:

.Replace what:="  *", replacement:=Chr(10), lookat:=xlPart

它确实用换行替换了空格,但删除了空格后面的其余字符串

我希望替换操作仅匹配字符串

后面有文本的情况

2 个答案:

答案 0 :(得分:1)

星号*与文本的其余部分匹配,因此文本的其余部分将被替换。

你说你只想替换这两个空格,所以你不应该包括星号。

如果你想替换两个或多个空格,那么AFAIK的Range.Replace函数不支持实际的正则表达式(你可以指定“两个或多个空格”),所以你不得不求助于使用RegEx库和操作每个单元格通过代码(即在代码中,逐个单元格遍历范围,并使用VBScript RegEx库将正则表达式替换应用于单元格的值,您可以轻松地对其进行谷歌搜索)。

编辑:替代使用VBScript RegExp对象

如上所述,要使用实际的正则表达式,您可以自己迭代单元格并使用VBScript RegExp对象进行替换。下面在活动工作表中查找单元格,其中包含两个空格后跟字符,然后用Chr(10)替换这两个空格。

Sub foo()
    Dim rng As Range
    Set rng = ActiveSheet.UsedRange
    Dim regex As New RegExp
    regex.Pattern = "([^ ]+)  ([^ ]+)"
    Dim cell As Range
    For Each cell In rng
        If Not cell.HasFormula Then
            cell.Value = regex.Replace(cell.Value, "$1" & Chr(10) & "$2")
        End If
    Next
End Sub

您需要将VBScript正则表达式库添加到项目的引用中。

答案 1 :(得分:0)

什么阻止你分裂双倍空间并加入vbNewline?即。

Option Explicit

Sub ReplaceSubstring()

Debug.print join(Split("ABCD1234 ABCD1234", "  ", -1,vbbinarycompare),vbNewline)

End sub

它能否可靠地为您提供所需的输出?