22

我正在尝试编写一个有助于地址的正则表达式,例如 21-big walk way 或 21 St.Elizabeth's drive 我想出了以下正则表达式,但我不太热衷于如何合并所有字符(字母数字、空格破折号、句号、撇号)

"regexp=^[A-Za-z-0-99999999'
4

13 回答 13

28

请参阅有关使用正则表达式进行地址验证的问题的答案: 正则表达式街道地址匹配

问题是,街道地址的格式差异很大,很难针对它们进行编码。如果您正在尝试验证地址,则很难根据其格式查找地址是否无效。这将返回以下地址(253 N. Cherry St.),任何具有相同格式的内容:

\d{1,5}\s\w.\s(\b\w*\b\s){1,2}\w*\.

这允许 1-5 位数字用于门牌号、一个空格、一个字符后跟一个句点(用于 N. 或 S.)、1-2 个单词用于街道名称,以缩写结尾(如 st. 或 rd.) .

因为正则表达式用于查看事物是否符合标准或协议(您定义),所以您可能不想允许上面提供的地址,尤其是第一个带有破折号的地址,因为它们不是很标准。如果你愿意,你可以修改我上面的代码以允许它们——你可以添加

(-?)

允许破折号但不需要破折号。

此外,http://rubular.com/是一种学习正则表达式的快速互动方式。试试上面的地址。

于 2012-07-12T17:49:03.847 回答
19

如果您没有上述地址的固定格式,我会使用正则表达式来消除地址中未使用的符号(如专门的 sybmols - &(%#$^)。结果会是:

[A-Za-z0-9'\.\-\s\,]
于 2013-09-17T15:26:57.580 回答
9

只是为了补充Serzas的答案(因为没有足够的代表发表评论)。字母和数字可以有效地用 \w 代替单词。此外,撇号、逗号、句号和连字符不一定需要反斜杠。我的要求还涉及正斜杠和反斜杠,因此 \/ 以及最后带有 \s 的空格。对我来说工作的正则表达式是:

pattern: "[\w',-\\/.\s]"
于 2017-02-03T10:00:39.600 回答
8

用于简单地址验证的正则表达式

^[#.0-9a-zA-Z\s,-]+$

例如地址匹配案例

#1, North Street, Chennai - 11 

例如地址不匹配大小写

$1, North Street, Chennai @ 11
于 2017-10-06T11:13:34.780 回答
4

我已经成功使用了;

Dim regexString = New stringbuilder
    With regexString
       .Append("(?<h>^[\d]+[ ])(?<s>.+$)|")                'find the 2013 1st ambonstreet 
       .Append("(?<s>^.*?)(?<h>[ ][\d]+[ ])(?<e>[\D]+$)|") 'find the 1-7-4 Dual Ampstreet 130 A
       .Append("(?<s>^[\D]+[ ])(?<h>[\d]+)(?<e>.*?$)|")    'find the Terheydenlaan 320 B3 
       .Append("(?<s>^.*?)(?<h>\d*?$)")                    'find the 245e oosterkade 9
    End With

    Dim Address As Match = Regex.Match(DataRow("customerAddressLine1"), regexString.ToString(), RegexOptions.Multiline)

    If Not String.IsNullOrEmpty(Address.Groups("s").Value) Then StreetName = Address.Groups("s").Value
    If Not String.IsNullOrEmpty(Address.Groups("h").Value) Then HouseNumber = Address.Groups("h").Value
    If Not String.IsNullOrEmpty(Address.Groups("e").Value) Then Extension = Address.Groups("e").Value

正则表达式将尝试查找结果,如果没有,则移至下一个替代项。如果没有找到结果,则 4 种格式都不存在。

于 2013-08-18T12:12:40.687 回答
4

这个对我有用:

\d+[ ](?:[A-Za-z0-9.-]+[ ]?)+(?:Avenue|Lane|Road|Boulevard|Drive|Street|Ave|Dr|Rd|Blvd|Ln|St)\.?

来源:https ://www.codeproject.com/Tips/989012/Validate-and-Find-Addresses-with-RegEx

于 2018-02-08T19:02:43.080 回答
2

对于此类任务,Regex 是一个非常糟糕的选择。尝试寻找可以清理地址数据的 Web 服务或地址数据库或产品。

有关的:

于 2014-04-03T09:20:49.133 回答
1

作为一个简单的单行表达式推荐这里,

^([a-zA-z0-9/\\''(),-\s]{2,255})$

于 2021-01-17T05:29:00.330 回答
0

这是我使用正则表达式查找地址的方法:

一组模式对于查找我们可能期望从一个地址开始的许多形式很有用,该地址仅以数字开头,后跟一组字符串(例如 1 Basic Road),然后变得更具体,例如查找“PO Box”、“c /o"、"attn:" 等。

下面是一个简单的python测试。测试将找到所有地址,但不会找到最后 4 项公司名称。此示例并不全面,但可以根据您的需要进行更改并捕获您在数据中找到的示例。

import re
strings = [
    '701 FIFTH AVE',
    '2157 Henderson Highway',
    'Attn: Patent Docketing',
    'HOLLYWOOD, FL 33022-2480',
    '1940 DUKE STREET',
    '111 MONUMENT CIRCLE, SUITE 3700',
    'c/o Armstrong Teasdale LLP',
    '1 Almaden Boulevard',
    '999 Peachtree Street NE',
    'P.O. BOX 2903',
    '2040 MAIN STREET',
    '300 North Meridian Street',
    '465 Columbus Avenue',
    '1441 SEAMIST DR.',
    '2000 PENNSYLVANIA AVENUE, N.W.',
    '465 Columbus Avenue',
    '28 STATE STREET',
    'P.O, Drawer 800889.',
    '2200 CLARENDON BLVD.',
    '840 NORTH PLANKINTON AVENUE',
    '1025 Connecticut Avenue, NW',
    '340 Commercial Street',
    '799 Ninth Street, NW',
    '11318 Lazarro Ln',
    'P.O, Box 65745',
    'c/o Ballard Spahr LLP',
    '8210 SOUTHPARK TERRACE',
    '1130 Connecticut Ave., NW, Suite 420',
    '465 Columbus Avenue',
    "BANNER & WITCOFF , LTD",
    "CHIP LAW GROUP",
    "HAMMER & ASSOCIATES, P.C.",
    "MH2 TECHNOLOGY LAW GROUP, LLP",
]

patterns = [
    "c\/o [\w ]{2,}",
    "C\/O [\w ]{2,}",
    "P.O\. [\w ]{2,}",
    "P.O\, [\w ]{2,}",
    "[\w\.]{2,5} BOX [\d]{2,8}",
    "^[#\d]{1,7} [\w ]{2,}",
    "[A-Z]{2,2} [\d]{5,5}",
    "Attn: [\w]{2,}",
    "ATTN: [\w]{2,}",
    "Attention: [\w]{2,}",
    "ATTENTION: [\w]{2,}"
]
contact_list = []
total_count = len(strings)
found_count = 0
for string in strings:
    pat_no = 1
    for pattern in patterns:
        match = re.search(pattern, string.strip())
        if match:
            print("Item found: " + match.group(0) + " | Pattern no: " + str(pat_no))
            found_count += 1
        pat_no += 1

print("-- Total: " + str(total_count) + " Found: " + str(found_count)) 
于 2020-07-11T18:55:30.853 回答
0

UiPath Academy 培训视频列出了这个适用于美国地址的 RegEx(它对我来说很好用):

\b\d{1,8}(-)?[a-z]?\W[a-z|\W|\.]{1,}\W(road|drive|avenue|boulevard|circle|street|lane|waylrd\.|st\.|dr\.|ave\.|blvd\.|cir\.|In\.|rd|dr|ave|blvd|cir|ln)
于 2021-05-26T14:42:01.867 回答
0

我有一个不同的用例 - 在日志中查找任何地址并责骂应用程序开发人员(devops 工作中最喜欢的部分)。我的优势是在模式中有“地址”这个词,但如果你有特定的字段要扫描,应该可以不用它

\baddress.[0-9\\\/# ,a-zA-Z]+[ ,]+[0-9\\\/#, a-zA-Z]{1,}
  1. 寻找“地址”这个词 - 如果不适用,请跳过这个
  2. 查找第一个部件号、字母、#、空格 - 单元号/门牌号/套房号/门号
  3. 用空格或逗号分隔
  4. 查找其余地址数字、字母、#、空格中的一项或多项

测试:

  • 1 Sleepy Boulevard 邮政信箱,65745 箱
  • 套房 #100 /98,North St,Snoozepura
  • 新泽西州大道,
  • 420 套房 1130 Connect Ave., NW,
  • 420 套房 19 / 21 旧大街,
  • 套房 12,斯普林菲尔德,维多利亚州 3001
  • 套房#100/98 North St Snoozepura

当街道地址带有单元/套房号,邮政编码,只有街道时,这对我有用。它也与 IP 地址或 MAC 地址不匹配。使用额外的空间。这假设用户是普通人,用逗号、井号或空格分隔街道地址的元素,而不是使用“|”等字符的精神病患者 或者 ”:”!

于 2021-08-31T05:15:01.920 回答
0

对于法国地址和一些国际地址,我也使用它。

[\\D+ || \\d]+\\d+[ ||,||[A-Za-z0-9.-]]+(?:[Rue|Avenue|Lane|... etcd|Ln|St]+[ ]?)+(?:[A-Za-z0-9.-](.*)]?)
于 2021-10-20T13:56:30.577 回答
0

我从这里给出的回复中受到启发,并带来了这两个解决方案

  • 支持可选大写
  • 也支持法语

正则表达式结构

  1. 数字(必填)
  2. 字母、字符和空格
  3. 至少一个常用地址关键字(必填)
  4. 在换行之前你想要多少个字符

定义:

准确性

检测地址的能力,而不是看起来像地址的东西。

范围

检测不常见地址的能力。

正则表达式 1:

  • 高准确率
  • 低量程
/[0-9]+[ |[a-zà-ú.,-]* ((highway)|(autoroute)|(north)|(nord)|(south)|(sud)|(east)|(est)|(west)|(ouest)|(avenue)|(lane)|(voie)|(ruelle)|(road)|(rue)|(route)|(drive)|(boulevard)|(circle)|(cercle)|(street)|(cer\.)|(cir\.)|(blvd\.)|(hway\.)|(st\.)|(aut\.)|(ave\.)|(ln\.)|(rd\.)|(hw\.)|(dr\.)|(a\.))([ .,-]*[a-zà-ú0-9]*)*/i

在此处输入图像描述

正则表达式 2:

  • 精度低
  • 高范围
/[0-9]*[ |[a-zà-ú.,-]* ((highway)|(autoroute)|(north)|(nord)|(south)|(sud)|(east)|(est)|(west)|(ouest)|(avenue)|(lane)|(voie)|(ruelle)|(road)|(rue)|(route)|(drive)|(boulevard)|(circle)|(cercle)|(street)|(cer\.?)|(cir\.?)|(blvd\.?)|(hway\.?)|(st\.?)|(aut\.?)|(ave\.?)|(ln\.?)|(rd\.?)|(hw\.?)|(dr\.?)|(a\.))([ .,-]*[a-zà-ú0-9]*)*/i

在此处输入图像描述

于 2021-11-05T23:59:04.583 回答