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.”替换为“”)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年前