Regex 使用正则表达式从地址字段解析法律描述

Regex 使用正则表达式从地址字段解析法律描述,regex,vb.net,parsing,regex-group,street-address,Regex,Vb.net,Parsing,Regex Group,Street Address,不幸的是,我需要从最初输入遗留数据库中单个字段的数据中解析出各个地址元素。现在,我正试图通过将信息拆分为适当的字段(街道地址、城市、州、邮政编码),为我们公司的所有未来开发项目规范化这些数据(用于历史报告等)。然而,我必须处理的一些地址只不过是物业的法律描述——例如,ST 74999某地市1号地块或ST 74998某地市S1-T1-R1 我相信我实际上已经让大多数标准地址信息解析工作得相当好了,但有一点我不确定如何完成,主要是因为我对RegEx相对不熟悉。我想做的是在试图从字段的剩余值解析任何其

不幸的是,我需要从最初输入遗留数据库中单个字段的数据中解析出各个地址元素。现在,我正试图通过将信息拆分为适当的字段(街道地址、城市、州、邮政编码),为我们公司的所有未来开发项目规范化这些数据(用于历史报告等)。然而,我必须处理的一些地址只不过是物业的法律描述——例如,ST 74999某地市1号地块
或ST 74998某地市S1-T1-R1

我相信我实际上已经让大多数标准地址信息解析工作得相当好了,但有一点我不确定如何完成,主要是因为我对RegEx相对不熟悉。我想做的是在试图从字段的剩余值解析任何其他信息之前提取这些法律描述。我知道我的模式“看起来像什么”,但我不确定如何构造实际的正则表达式模式

我知道我将与一些捕获小组合作,但我完全不知道如何设置它以匹配我想要看到的内容。我试过玩类似于
^((L(\w\s)*\d+(\w*\d*\s*)?)(B(\w\s)*\d+(\w*\d*\s*)?),)
,但显然不是这样(请参阅我的)。我只是不太理解正则表达式语法,还不知道我做错了什么

下面是我想在正则表达式中使用的模式规则。我意识到这些数据可能是两个独立的“传递”——一次寻找地段/区块符号,然后再次寻找区段/乡镇/范围符号——但这完全没问题。我也明白,在提取数据时,没有什么是绝对100%准确的,我将处理一些“错误”匹配,甚至是“遗漏”匹配,这些匹配必须手动处理,但是让这个正则表达式提取我能提取的内容将是规范化我的数据的一个巨大的开端。在这一点上,我只是试图在解析其余数据之前从地址中删除任何“额外”元素

正则表达式应该只在修剪字符串的最开始处找到这些模式(没有前导或尾随空格),因为法律描述(至少在这个特定的数据库中)在地址字符串中不会比最开始处“晚”找到


匹配规则-批次/区块法律描述
  • 修剪后的大写字符串的第一个字符是“
    L
    • 按此顺序,“
      L
      ”后面跟着:
      • 零个或多个字母字符或空格(例如,“
        LOT
        ”、“
        LOTS
        ”、“
        LT
        ”等)
      • 必须包含一个或多个数值
    • 第一个数字字符(或这些字符的某些组合)后可能有另一个数字、逗号、破折号或空格
  • 上面的可以后跟一个“
    B
    ”字符
    • 按此顺序,“
      B
      ”后面跟着:
      • 零个或多个字母字符或空格(例如,“
        BLK
        ”、“
        BLOCK
        ”、“
        BLCK
        ”等)
      • 必须包含一个或多个数值
  • 法律描述应以逗号(表示下一个地址元素)或字符串结尾终止。“”组和该终止之间的任何字符都应包含在法律描述中(不应包含尾随逗号)

匹配规则-区段/乡镇/范围法律描述
  • 修剪后的大写字符串的第一个字符是“
    S
    • 按此顺序,“
      S
      ”后面将跟着:
      • 零个或多个字母字符或空格(例如“
        节”
        ”、“
        秒”
        ”、“
        节”
        ”等)
      • 一个或多个数值
    • 第一个数字字符后可能有另一个数字、逗号、破折号或空格
  • 上述可以后跟一个“
    T
    ”字符
    • 如果存在,按此顺序,“
      T
      ”后面将跟着:
      • 零个或多个字母字符或空格(例如,“
        TWNSHP
        ”、“
        TOWN
        ”、“
        TWN
        ”等)
      • 必须包含一个或多个数值
      • 零个或多个字母字符或空格
    • 如果“
      T
      ”字符不存在且字符串未终止(见下文),则下一个要查找的字符应为数字
  • 上面的可以后跟一个“
    R
    ”字符
    • 按此顺序,“
      R
      ”后面将跟着:
      • 零个或多个字母字符或空格(例如,“
        RANGE
        ”、“
        RNG
        ”、“
        RG
        ”等)
      • 必须包含一个或多个数值
      • 零个或多个字母字符或空格
    • 如果“
      R
      ”字符不存在且字符串未终止(见下文),则下一个要查找的字符应为数字
  • 法律描述应以逗号(表示下一个地址元素)或字符串结尾终止。“范围”组和该终止之间的任何字符都应包含在法律描述中(不应包含尾随逗号)

以下是我正在处理的一些(稍微模糊的)示例数据:


样本数据-批次/区块法律说明
1。L2 B64,某地,好的,74999
2.北卡罗来纳州某地罗达1号楼,邮编74999-81
3.L20-22 B10 LETCHERS地址,某地,OK,74999
4.L2 S10-13-18,某个城市,