regex - 操作字符串以提取地址

标签 regex vba excel

我目前正在使用一个非常大的城市地址数据源进行一些工作,其中的数据如下所示。

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/

相关文章:

php - 使用 mod_rewrite 将路径转换为查询字符串变量

regex - sed 删除所有包含单词 password 的行。但不要保留空行

excel - 如果代码在不同的文件中,如何在目标文件中进行更改

excel - 使用 vba 选择要在其中扫描特定工作表以获取数据的文件夹

excel - 在 2 列前任-后继列表中查找最新项目

java - 如何使用使用给定模式最后一次出现的正则表达式来拆分Java中的字符串列表?

javascript - 在 JavaScript 中通过 RegExp 一行解析电子邮件;使右侧不区分大小写,但保留左侧

excel - 有没有一种简单的方法来检查字符串是否以字母开头(任何 4 个字母)?

vba - 从 excel/vba 生成电子邮件到 Outlook 时,我的电子邮件签名不会出现?

excel - 提供一个 Excel 公式,用于在 Excel 中计算正负 N 的二项式系数 (N,K)