VBA使用正则表达式搜索重复单个字符

时间:2017-01-20 20:20:55

标签: regex excel vba excel-vba

所以上周我一直在学习VBA,我编写了一个数据库清理工具。但是,我正在尝试实现一个清除,删除任何重复字符的迹象。特别是xxx,TTTTT,6666等。然而,在线搜索和做一些研究我找不到解决方案。

我认为正则表达式看起来像这样: “^ [(\ W)+] $”

但是,这只会找到任何单词字符并替换它们,所以我需要设置搜索来查找任何一个字符,一遍又一遍地重复。

我看到有人有“^(。)\ 1 + $”,它似乎可以做到这一点,但它切断了我不想搜索的数据的末尾。

我很震惊,这方面没有任何主题,我认为正则表达式是找到它而不是做硬代码的最简单方法,例如。循环遍历单元格值并检查每个字符。

谢谢它整天都在震撼我的大脑。

2 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情。我将你的正则表达式更改为(.)\1+,因此它可以删除所有重复的字符。不要忘记使用工具添加Regexp>参考> Microsoft VBScript正则表达式5.5。

Public Function cleanRange(cells As range)
    Dim pattern As String: pattern = "(.)\1+"
    Dim subst As String: subst = "$1"
    Dim regex As New RegExp

    Dim cell As range
    For Each cell In cells
        With regex
            .Global = True
            .pattern = pattern
            If .Test(cell.Value) Then
                cell.Value = .Replace(cell.Value, subst)
            End If
        End With
    Next cell
End Function

答案 1 :(得分:0)

我这样编码就像我需要它一样。

For pp = 1 To Len(Sheets(1).Cells(x, "I").Value)
                    char1 = Mid(Sheets(1).Cells(x, "I").Value, pp, 1)
                    If pp < Len(Sheets(1).Cells(x, "I").Value) Then
                        char2 = Mid(Sheets(1).Cells(x, "I").Value, pp + 1, 1)
                        If char1 <> char2 Then
                            Exit For
                        End If
                    Else
                        Rows(x).EntireRow.Delete
                        delFlag = 1
                       Exit For
                    End If
                Next