2017-04-21 220 views
0

我遇到以星號,大道等詞語開頭的街道名稱問題,因爲它們包含st和ave。我知道它與(?< = \ s)有關,但我似乎無法得到正確的正則表達式來糾正此問題。正則表達式匹配街道類型(如果街道名稱以它開頭)

Test Link

(\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)).*?((?:UNT|\#)[^\S\r\n]?\w|\w.*)?$|(\d+).*?((?:[a-z0-9](?:[a-z0-9]|[^\S\r\n])+))$ 

回答

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])+))$ 

演示:https://regex101.com/r/h3LYzN/11

0

好的,如果我理解你的需求,你想驗證一個街道地址,如果有效的話,在建築物#,街道名稱,街道類型和可選單元#上匹配組。爲了鎖定街道類型,可以用邊界條件'\ b'將其包圍。

所以這應該是一個更有效的版本,你要查詢的(避免嵌套*在*)

^([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]+)?$