我目前正在使用一个非常大的城市地址数据源进行一些工作,其中的数据如下所示。
137 是正确的地址,但它属于街道上 135-138A 的一栋建筑物。
来源:
137 9/F 135-138A KING STREET 135-138A KING STREET TOR
我用过 function这会删除在extendoffice上显示的重复项。
第二列变成了这样:
137 9/F 135-138A KING STREET TOR
我现在想做的是
- 查找地址号码并将其添加到街道名称前面
- 删除连接到破折号的数字 - ):
9/F 137 KING STREET TOR
这是实现这一目标的最佳方法吗?
我遇到的主要问题是地址名称中有许多不一致的空格。 “范戴克路”。
无论如何,我可以在数组中找到“-”,并为破折号两侧的 2 个数字设置变量,并将其替换为位于前面的正确地址数字
Function RemoveDupes2(txt As String, Optional delim As String = " ") As String
Dim x
With CreateObject("Scripting.Dictionary")
.CompareMode = vbTextCompare
For Each x In Split(txt, delim)
If Trim(x) <> "" And Not .exists(Trim(x)) Then .Add Trim(x), Nothing
Next
If .Count > 0 Then RemoveDupes2 = Join(.keys, delim)
End With
End Function
谢谢
最佳答案
正则表达式是一种(除其他外)搜索字符串中的特征的方法。
看起来您正在寻找的功能是:数字:可能有一些空格:破折号:可能有一些空格:数字
在正则表达式中,这将表示为:
([0-9]*)[ ]*-[ ]*([0-9]*)
这意味着:找到一组连续的数字,后跟零个或多个空格,然后是破折号,然后是零个或多个空格,然后是更多数字。
括号表示将返回的元素。因此,您可以将变量分配给第一个数字或第二个数字。
如果地址中的其他地方可能出现破折号,您可能需要对此进行调整。
有关实际实现的更多信息,请访问:How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops
关于regex - 操作字符串以提取地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42127009/