无法正确查找/替换

时间:2017-10-24 07:09:45

标签: regex excel excel-vba csv parsing vba

我有一个CSV文件,我试图从中删除HTML代码,并返回所有行。

使用<*>进行查找/替换会返回&#34;此公式存在问题&#34;错误。

尝试\<*>会收到错误&#34;我们无法找到要替换的内容。&#34;

尝试此VBA也无效 - 它运行成功,但所有标签仍然存在:

Sub t()
With Range("A1:AE60165")
    .Replace Chr(10), " "
    .Replace Chr(13), " "
    .Replace vbCr, " "
    .Replace vbLf, " "
    .Replace vbCrLf, " "
    .Replace "<*>", ""
End With
End Sub

该宏也删除任何换行符或回车符。使用Char!10)Char(13)进行查找/替换也不会做任何事情。

我尝试的最后一件事是Worksheetfunction.Clean(Range("A1")),它也什么也没做。 如果在A2中,我使用=CLEAN(A1),则会成功删除换行符。我不能在所有细胞上做到这一点,因为数据集非常大。

我甚至无法从所有单元格中成功删除@。我刚刚运行它,它删除了23个实例,但即使我选择的单元格也有@还没有删除。

我怀疑它与CSV有关,因为我不知道它为何如此复杂。这是一个很多数据,所以功能可能不是最好的选择。

可能是某些Unicode类型问题吗?

编辑:FWIW,我正在使用profiles.csv找到here,因为我学习Python只是为了解决这个问题。 Here's a pastebin链接到少量数据,但我不确定它的翻译效果如何?#34;}&#34;}在该网站上。

2 个答案:

答案 0 :(得分:1)

尝试使用notepad ++,它会更容易,或者您可以在SQL中导入CSV并在那里进行替换

答案 1 :(得分:0)

下面你会找到一个函数调用来说明这个过程。您应该处于循环中进行这些调用的位置,最好是在数组循环中并在之后写回结果以提高性能。

示例电话

Sub test_RemoveHTML()
Dim s As String: s = "<b>xxx</b><div />"
MsgBox RemoveHTML(s)
End Sub

辅助功能

Function RemoveHTML(s As String) As String
' Purpose: remove HTML tags and comments from string via regular expression
On Error GoTo oops
Dim oRegEx   As Object       ' Late Binding
Set oRegEx = CreateObject("vbscript.regexp")

With oRegEx
    '.Pattern = "<[^>]+>"      'basic html pattern
    .pattern = "<!*[^<>]*>"    'html tags and comments
    .Global = True
    .IgnoreCase = True
    .MultiLine = True
End With

RemoveHTML = oRegEx.Replace(s, "")

leaveFunction:
On Error Resume Next
Set oRegEx = Nothing            ' clear memory
Exit Function

oops:
MsgBox "Error No " & Err.Number & " " & Err.Description, _
       vbExclamation, "RemoveHTML"
Resume leaveFunction
End Function