Regexp 清理Excel中的域列表-正则表达式/宏?

Regexp 清理Excel中的域列表-正则表达式/宏?,regexp,vba,regex,excel,dns,Regexp,Vba,Regex,Excel,Dns,我有一个巨大的域名电子表格,我需要清理如下: 删除所有http://(简单地将所有-“http://”替换为“”) 删除任何www.(简单地将所有“www.”替换为“”) 删除任何子域(完全删除实际行,而不仅仅是url中的子域) 在域扩展(即website.com/blah/blahbah/变为website.com)后删除任何内容(只需将所有-“/*”替换为”,然后将所有“/”替换为”) 所以我剩下的只是一个干净域的电子表格,比如“website.com” 我想我已经对1、2和4进行了排序(如

我有一个巨大的域名电子表格,我需要清理如下:

  • 删除所有
    http://
    (简单地将所有-“http://”替换为“”)
  • 删除任何
    www.
    (简单地将所有“www.”替换为“”)
  • 删除任何子域(完全删除实际行,而不仅仅是url中的子域)
  • 在域扩展(即
    website.com/blah/blahbah/
    变为
    website.com
    )后删除任何内容(只需将所有-
    “/*”
    替换为
    ,然后将所有
    “/”替换为
  • 所以我剩下的只是一个干净域的电子表格,比如
    “website.com”

    我想我已经对1、2和4进行了排序(如上所述),但我真的很难处理3

    有什么想法吗?我可以用/来完成这项工作,并完全删除该行吗

    样本数据:







    第一、第二和第四篇文章会给我留下:

    scholastic.com
    imgworld.teamworkonline.com
    topfreegraphics.com
    workcircle.co.uk
    healthycanadians.gc.ca
    gsociology.icaap.org

    我需要完全删除那些讨厌的子域,只删除行。我意识到我不能只搜索2个“.”,因为显然很多域扩展(即
    .co.uk
    )都包含这一点


    感谢您的帮助。

    快速而肮脏的解决方案

    =IF(ISERROR(FIND(".",A1,FIND(".",A1,1)+1)),"",IF(ISERROR(MATCH(RIGHT(A1,LEN(A1)-FIND(".",A1)),$D:$D,0)),"Subdomain",""))
    
    A列:域列表。
    D列:用户编辑的已接受子域记录列表(gov.uk等)

    也适用于具有3个或更多点的域


    子域单元可以过滤出来,然后删除。

    作为一种非常简单的方法:

    for i = worksheet.rows.count to 1 step -1
    Dim counter as Integer
    Dim Value as String
    Dim splitter as String()
    Value = worksheet.cells(i,1).value
    Dim splitter() As String
    splitter=split(Value,".")
    
    if ubound(splitter)>1 then
    workseet.rows.removeat(i)
    end if
    next
    
    可能无法立即运行,因为没有数据来测试此功能,但它通常应该可以运行…

    如果您能够确定在第三步中使用哪种功能,则在适当调整范围后,以下代码将执行您需要它执行的操作

    Private Sub xlRegexp()
    
    Dim c As Integer
    Dim n As Integer
    Dim strOldText As String
    Dim RegExFindThis As String
    Dim RegEx
    Set RegEx = CreateObject("vbscript.regexp")
    
    c = 1
    
    WhichCase:
    
     Select Case c
        Case 1    
            RegExFindThis = "http://"    
        Case 2    
            RegExFindThis = "www."    
        Case 3    
            RegExFindThis = "/.*"    
        Case Else    
            GoTo Subdomains    
    End Select
    
    With RegEx
        .Pattern = RegExFindThis
        .Global = True
    End With
    
    For n = [X] To [Y]
        Range("A" & n).Activate 'assumes your list is in column A
        strOldText = ActiveCell.Text
        ActiveCell.Value = RegEx.Replace(strOldText, "")
    Next
    
    c = c + 1
    
    GoTo WhichCase
    Subdomains:
    
    RegExFindThis = "[STEP 3 RegExp]"
    
    With RegEx
        .Pattern = RegExFindThis
        .Global = True
    End With
    
    n = 1
    
    For n = [X] To [Y]
        Range("A" & n).Activate 'assumes your list is in column A
        If RegEx.Test(ActiveCell.Text) Then
            Rows(ActiveCell.Row).Select
            Selection.Delete Shift:=xlUp
        End If
    Next
    
    Set RegEx = Nothing
    MsgBox ("Macro complete.")
    End Sub
    

    您可以循环查看数据,确实可以检查double。如果您愿意,只需删除当前行(宏),我可以查看一下,或者如果您知道如何更好!如果您需要具体帮助,请向我们展示一些真实的数据(例如screeshot)还有预期的输出,你到目前为止尝试了什么,你的问题是什么。这样,你将得到真实而准确的答案。抱歉,伙计们,添加了示例数据,以及我是如何达到我现在的目标的。谢谢Tim,好多了。尽管很棘手-除非在某个地方有一个有效域扩展的主列表,否则我认为你的最佳选择是验证可能的通过(
    .co.xx
    .com.xxx
    等),然后在文件中列出剩余部分以供手动检查Hanks Brett,听起来很痛苦…电子表格中有150000个域!!谢谢Juri,这看起来不错,我会尝试一下并报告回来。-他说,4年前