0

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

  1. 删除所有http://(简单替换所有 - “http://” 与 “”)
  2. 删除任何www.(简单替换所有 - “www。”与“”)
  3. 删除任何子域(完全删除实际行,而不仅仅是 url 中的子域)
  4. 删除域扩展后的任何内容(即website.com/blah/blahbah/变为just website.com(简单替换全部 - "/*"""然后全部替换"/"""

所以我剩下的只是一个干净域的电子表格,比如"website.com".

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

有任何想法吗?我可以使用 / 执行此操作,并且实际上完全删除该行吗?

样本数据:

http://www.scholastic.com/kids/stacks/games/
http://imgworld.teamworkonline.com/
http://topfreegraphics.com/
http://www.workcircle.co.uk/
http:// www.healthycanadians.gc.ca/index-eng.php
http://gsociology.icaap.org/methods/soft.html

帖子 1、2 和 4 会给我留下:

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

这是我需要完全删除的那些讨厌的子域,只需删除该行。我已经意识到我不能只搜索 2 x ".",因为显然很多域扩展名(即.co.uk)都包含它。

任何帮助表示赞赏。

4

3 回答 3

0

如果您可以确定在第三步中使用哪个正则,那么一旦您适当地调整了范围,以下代码将完成您需要它做的事情。

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
于 2012-11-05T22:08:42.880 回答
0

快速而肮脏的解决方案。

=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 个或更多点的域。

之后可以过滤掉子域单元格并删除。

于 2012-11-05T09:47:33.590 回答
0

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

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

可能不会开箱即用,因为没有数据可以测试它,但它应该可以正常工作......

于 2012-11-05T09:49:37.647 回答