我遇到街道名称的问题,这些名称以星星,大道等词开头。因为它们在开头包含st和ave。我知道它与(?< = \ s)有关但是我似乎无法正确调整正则表达式来纠正这个问题。
sg-
答案 0 :(得分:0)
您需要在特殊字替换列表(首先剥离版本)之后添加\b
(字边界):
...(?:court|ct|street|st|...|vw)\b...
^^
整个正则表达式:
(\d+).*?((?:[a-z0-9].*(?:[a-z]|[^\S\r\n])+)).*?((?<=\s)(?:court|ct|street|st|drive|dr|lane|ln|rd|blvd|cir|trl|trai|crossing|xing|pl|place|ave|cv|cove|trce|trace|mnr|way|loop|bnd|bend|lndg|landing|path|pkwy|parkway|pass|rdg|ridge|vw)\b).*?((?:UNT|\#)[^\S\r\n]?\w|\w.*)?$|(\d+).*?((?:[a-z0-9](?:[a-z0-9]|[^\S\r\n])+))$
答案 1 :(得分:0)
好的,如果我理解您的需求,您需要验证街道地址,如果有效,则匹配建筑物#,街道名称,街道类型和可选单元#的组。要锁定街道类型,您可以使用边界条件'\ b'将其包围。
因此,这应该是您想要的更有效的查询版本(避免嵌套* in *)
^([0-9]+)\ (.*?)\ \b(court|ct|street|st|drive|dr|lane|ln|rd|blvd|cir|trl|trai|crossing|xing|pl|place|ave|cv|cove|trce|trace|mnr|way|loop|bnd|bend|lndg|landing|path|pkwy|parkway|pass|rdg|ridge|vw)\b.*?\b([0-9]+)?$