regex - 如何在Excel中使用VBA和RegEx替换数据?

标签 regex vba excel

我有一个大的 .csv 文件(~600k 行,56Mo),里面有数据库行(每行有一个 ID、客户名称、客户地址、客户生日日期等)。问题是,在某些行上,某些数据写得不好(逗号不应该在那里,这会弄乱列)。

我猜我必须执行一些正则表达式来检测有问题的行,并用破折号或其他内容替换错误的逗号。我关注了this article ,经过一番尝试,我让他发现了那些困惑的线条。

Private Sub simpleRegex()
Dim strPattern As String: strPattern = "[^a-zA-Z0-9_,\-]([A-z]+)\,[^a-zA-Z0-9_,\-]([A-z]+)"

Dim strReplace As String: strReplace = "[^a-zA-Z0-9_,\-][A-z]+\-[^a-zA-Z0-9_,\-][A-z]"

Dim regEx As Object
Set regEx = CreateObject("VBScript.RegExp")
Dim strInput As String
Dim Myrange As Range

Set Myrange = ActiveSheet.Range("A1:A2000")

For Each cell In Myrange
    If strPattern <> "" Then
        strInput = cell.Value

        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
        End With

        If regEx.Test(strInput) Then
            MsgBox (regEx.Replace(strInput, strReplace))
        Else

        End If
    End If
Next End Sub

问题是,如果我想用唯一值、预定义字符串(如 strReplace="replacement Words")更改 ciible 行,则此解决方案有效。我想要的是能够定位与我的模式匹配的一系列字符,并仅替换其中的一个字符(逗号)。一个例子是:

728,"HAY,HAYE",Marie,François,RAUTUREAU,85,29/05/1856,68;

进入:

728,"HAY-HAYE",Marie,François,RAUTUREAU,85,29/05/1856,68;

你有解决办法吗?

(抱歉,如果英语不好,那不是我的母语)。

最佳答案

如果我的理解是正确的,那么根本不需要 Regex

通过简单的Split,您也可以做到这一点。

Private Sub simpleReplace()
  Dim str() As String, cell As Variant, Myrange As Range, i As Long
  Set Myrange = ActiveSheet.Range("A1:A2000")
  For Each cell In Myrange
    str = Split(cell.Value, """")
    If UBound(str) Then
      For i = 1 To UBound(str) Step 2
        str(i) = Replace(str(i), ",", "-")
      Next
      cell.Value = Join(str, """")
    End If
  Next
End Sub

这将分割您的728,"HAY,HAYE",Marie,François,RAUTUREAU,85,29/05/1856,68; 进入:

(0) 728,
(1) HAY,HAYE
(2) ,Marie,François,RAUTUREAU,85,29/05/1856,68;

现在,Split 的每隔一个部分(奇数)将通常包含在 " 中。所以剩下的就是替换那里的逗号并再次将其插入单元格中。

如果没有找到",那么它将跳过这一行(因为上限为0)

如果您还有任何问题或者这不是您想要的,请告诉:)

关于regex - 如何在Excel中使用VBA和RegEx替换数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40460445/

相关文章:

python - 为什么这个正则表达式不起作用?也许是因为双重回顾?

regex - sed组匹配

excel - 运行时错误 '1004' : Select method of Range Class failed using ThisWorkbook

excel - 字典键按行分配

ms-access - querydefs 运行时错误 3265 : item not found in this collection

javascript - 使用正则表达式进行算术

javascript - REGEX/replace 只能工作一次

excel - 我可以在一项 Talend 工作中使用两次 excel 文件吗?

excel - 循环遍历 ListObject 中的行来删除它们非常慢

python - 无需Windows专用工具即可向现有xlsx添加密码(无人值守)