我正在尝试编写一个有助于地址的正则表达式,例如 21-big walk way 或 21 St.Elizabeth's drive 我想出了以下正则表达式,但我不太热衷于如何合并所有字符(字母数字、空格破折号、句号、撇号)
"regexp=^[A-Za-z-0-99999999'
我正在尝试编写一个有助于地址的正则表达式,例如 21-big walk way 或 21 St.Elizabeth's drive 我想出了以下正则表达式,但我不太热衷于如何合并所有字符(字母数字、空格破折号、句号、撇号)
"regexp=^[A-Za-z-0-99999999'
请参阅有关使用正则表达式进行地址验证的问题的答案: 正则表达式街道地址匹配
问题是,街道地址的格式差异很大,很难针对它们进行编码。如果您正在尝试验证地址,则很难根据其格式查找地址是否无效。这将返回以下地址(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/是一种学习正则表达式的快速互动方式。试试上面的地址。
如果您没有上述地址的固定格式,我会使用正则表达式来消除地址中未使用的符号(如专门的 sybmols - &(%#$^)。结果会是:
[A-Za-z0-9'\.\-\s\,]
只是为了补充Serzas的答案(因为没有足够的代表发表评论)。字母和数字可以有效地用 \w 代替单词。此外,撇号、逗号、句号和连字符不一定需要反斜杠。我的要求还涉及正斜杠和反斜杠,因此 \/ 以及最后带有 \s 的空格。对我来说工作的正则表达式是:
pattern: "[\w',-\\/.\s]"
用于简单地址验证的正则表达式
^[#.0-9a-zA-Z\s,-]+$
例如地址匹配案例
#1, North Street, Chennai - 11
例如地址不匹配大小写
$1, North Street, Chennai @ 11
我已经成功使用了;
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 种格式都不存在。
这个对我有用:
\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
作为一个简单的单行表达式推荐这里,
^([a-zA-z0-9/\\''(),-\s]{2,255})$
这是我使用正则表达式查找地址的方法:
一组模式对于查找我们可能期望从一个地址开始的许多形式很有用,该地址仅以数字开头,后跟一组字符串(例如 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))
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)
我有一个不同的用例 - 在日志中查找任何地址并责骂应用程序开发人员(devops 工作中最喜欢的部分)。我的优势是在模式中有“地址”这个词,但如果你有特定的字段要扫描,应该可以不用它
\baddress.[0-9\\\/# ,a-zA-Z]+[ ,]+[0-9\\\/#, a-zA-Z]{1,}
测试:
当街道地址带有单元/套房号,邮政编码,只有街道时,这对我有用。它也与 IP 地址或 MAC 地址不匹配。使用额外的空间。这假设用户是普通人,用逗号、井号或空格分隔街道地址的元素,而不是使用“|”等字符的精神病患者 或者 ”:”!
对于法国地址和一些国际地址,我也使用它。
[\\D+ || \\d]+\\d+[ ||,||[A-Za-z0-9.-]]+(?:[Rue|Avenue|Lane|... etcd|Ln|St]+[ ]?)+(?:[A-Za-z0-9.-](.*)]?)
我从这里给出的回复中受到启发,并带来了这两个解决方案
检测地址的能力,而不是看起来像地址的东西。
检测不常见地址的能力。
/[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
/[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