2012-02-22 18 views
15

Mặc dù tôi biết rằng việc kết hợp địa chỉ đường phố sẽ không bao giờ hoàn hảo Tôi đang tìm cách tạo một vài câu lệnh regex sẽ thu hẹp hầu hết thời gian.địa chỉ đường phố regex phù hợp

Tôi đang cố gắng làm nổi bật địa chỉ. Tôi hút ở regex và tôi đã cố gắng để có được gần nhưng ai đó có thể giúp tôi hiểu làm thế nào tôi có thể làm cho điều này tốt hơn?

chuỗi:

06:00-11:00, Tiểu Palma Sola, 6806 Fifth Ave NW, Bradenton, FL 34.209 Hãy tìm chỉ gần dsfsd sa FSA fasdf asfsds 5001 tây momma của bạn không sống ở đây 2005 ford ranger tôi,

Regex 1: (?! [a | p] m \ b)

/\ s + (\ d {2,5} \ s +) (([a -zA-Z | \ s +] {1,5}) {1,2})? ([\ s | \, |.] +)? (([a-zA-Z | \ s +] {1,30 }) {1,4}) (tòa án | ct | đường | st | drive | dr | lane | ln | ro quảng cáo | rd | blvd) ([\ s | \, |. | \;] +)? (([a-zA-Z | \ s +] {1,30}) {1,2}) ([\ s | \, |.] +)? \ b (AK | AL | AR | AZ | CA | CO | CT | DC | DE | FL | GA | GU | HI | IA | ID | IL | IN | KS | KY | LA | MA | MD | ME | MI | MN | MO | MS | MT | NC | ND | NE | NH | NJ | NM | NV | NY | OH | OK | HOẶC | PA | RI | SC | SD | TN | TX | UT | VA | VI | VT | WA | WI | WV | WY) ([\ s | \, |.] +)? (\ S + \ d {5})? ([\ S | \, |. ] +)/i

(Đôi khi đó chỉ là một đường phố và thành phố, nhưng không một quốc gia hoặc zip)

regex 2:

/\ b (\ d {2,5} \ s +) (?! [a | p] m \ b) (NW | NE | SW | SE | bắc | nam | tây | đông | n | e | s | w)? ([\ s | \, |. ] +)? (([a-zA-Z | \ s +] {1,30}) {1,4}) (tòa án | ct | đường | st | lái | dr | làn | ln | đường | rd | blvd)/i

Fiddle với nó: http://jsfiddle.net/isuelt/rMC6P/11/ địa chỉ

+1

Bạn không nêu mục tiêu cuối cùng của mình, vì vậy chúng tôi không thể biết bạn muốn gì hoặc cách chúng tôi có thể trợ giúp. "Để làm điều này tốt hơn" khá mơ hồ :) –

+17

Mắt tôi. ĐÔI MẮT CỦA TÔI. – geekchic

+0

Chào mừng bạn đến với Stack Overflow, @isuelt - đã lâu rồi, vì vậy đừng quên chấp nhận câu trả lời hữu ích nhất bằng cách nhấp vào dấu kiểm. – Matt

Trả lời

31

Mỹ không phải là một ngôn ngữ thông thường, và không thể được xuất hiện bằng cách sử dụng biểu thức thông thường. Chúng hữu ích trong một số trường hợp riêng biệt, nhưng nói chung, chúng sẽ thất bại cho bạn, đặc biệt là đối với đầu vào như thế.

Tôi đã từng làm việc tại một công ty xác minh địa chỉ. Trong câu trả lời cho câu hỏi của bạn, để "đánh dấu địa chỉ" trong một chuỗi văn bản, tôi khuyên bạn nên thử một tiện ích trích xuất. Có một vài lên đó, và tôi đề nghị bạn nhìn xung quanh, nhưng đây là ours sử dụng đầu vào từ câu hỏi của bạn --- như bạn có thể thấy, nó tìm thấy địa chỉ và xác nhận nó:

LiveAddress extraction example

Điểm cuối API trả về JSON có chứa vị trí bắt đầu và kết thúc của từng địa chỉ, cũng như nhiều thông tin về từng địa chỉ. (Xem đầu ra CSV ở dưới cùng của hình ảnh ở trên.)

Tôi khen bạn vì đã can đảm những cụm từ thông dụng mà bạn đã thử! Hy vọng rằng điều này là hữu ích.

+0

Ý tưởng xác minh bổ sung sẽ là sử dụng API mã hóa địa lý của Google để tìm hiểu liệu họ có dữ liệu cho địa chỉ đó hay không. – TheTedinator

+3

... * nếu * bạn đang hiển thị bản đồ (TOS). – Matt

+7

Đây có phải là câu trả lời hoặc quảng cáo cho SmartyStreets không? – Nick

0

tôi cần phải làm điều gì đó tương tự cho địa chỉ như

800 SE 20 AVENUE # 603, Deerfield Beach

9801 NW 3 STREET APT 5, PLANTATION

11909 GLENMORE DRIVE # 4 1, CORAL SPRINGS

Đây là regex mà tôi sử dụng

\s*([0-9]*)\s((NW|SW|SE|NE|S|N|E|W))?(.*)((NW|SW|SE|NE|S|N|E|W))?((#|APT|BSMT|BLDG|DEPT|FL|FRNT|HNGR|KEY|LBBY|LOT|LOWR|OFC|PH|PIER|REAR|RM|SIDE|SLIP|SPC|STOP|STE|TRLR|UNIT|UPPR|\,)[^,]*)(\,)([\s\w]*)\n 

Nó trả về các nhóm riêng biệt cho từng phần của địa chỉ (tôi không cần phân tích tên tiểu bang cho trường hợp của tôi). Hãy dùng thử tại đây https://regex101.com/r/OsvOxn/3

Các vấn đề liên quan