2009-07-09 22 views
0

我想使用正則表達式提取文本的一部分。因此,舉例來說,我有一個地址,並希望只返回數量和街道,並排除其他地區:使用RegEx提取文本的一部分

2222 Main at King Edward Vancouver BC CA 

但地址格式變化的大部分時間。我嘗試使用回顧後發正則表達式,並用此表達出來:

.*?(?=\w* \w* \w{2}$) 

以上的表達式處理上面的例子很好,但隨後變得太亂,只要逗號進入文本,郵政編碼可以是6字符串或兩個3字符的字符串與中間的空格等...

是否有任何更優雅的方式來提取除了lookbehind正則表達式的文本的一部分?

任何建議或在另一個方向的一個點是不勝感激。

謝謝!

+1

僅供參考,這是您使用的前視圖,而不是後視圖。 – 2009-07-10 01:44:22

+0

謝謝!我會記住的。 – Jaime 2009-07-10 19:11:05

回答

2

正則表達式適用於REGULAR數據,它遵循一個模式。所以如果你的數據是完全隨機的,不,沒有優雅的方式來使用正則表達式。另一方面,如果你知道你想要什麼值,你可以寫一些簡單的正則表達式,然後在每個字符串上測試它們。

Ex。 regex1 =地址#抓取器,regex2 =街道抓取器,regex3 =名稱抓取器。

嘗試在string1上使用regex1,regex2和最後的regex3進行匹配。移至下一個字符串。

+0

這就是我的想法。哦,我想我必須去做那些混亂的東西。 謝謝瑞恩! – Jaime 2009-07-10 19:13:45

1

以及我THOT我會扔我的帽子進入環:

.*(?=,? ([a-zA-Z]+,?\s){3}([\d-]*\s)?)

,你可能想在前面的好措施
^\d+,我沒有打擾指定長度郵政編碼......只是任何數量的字符連字符在這一個。

它爲這些投入至今和變化的城市/州/國家區域內昏迷:

  • 2222主要在愛德華國王溫哥華,BC,CA,333-333
  • 555公路和街道的地方CA 95000美國
  • 2222主要在愛德華國王溫哥華CA 333
  • 555路和街道的地方CA美國

它在計算城市,州和國家的末尾有三個詞,但除了它像ryansstack所說的那樣,如果它是隨機的,它將無法工作。如果這個城市是像紐約這樣的兩個詞,那麼它就行不通。是的...正則表達式不是這個工具。

btw:在regexhero上測試過。淨

+0

謝謝維克多!我會嘗試在我的最後使用更多數據進行測試。 – Jaime 2009-07-10 19:11:56

0

我能想到的2種方法可以做到這一點

1)如果你知道地址後,您的數據的「休息」是完全兩個字段,即BC和CA,你可以做各執你的字符串使用空格作爲分隔符,刪除最後2個項目。

2)對分隔符/ [A-Z] [A-Z] /進行分割並將結果存儲在數組中。然後打印出陣列(假設地址不包含2個或更多大寫字母)