2013-01-23 36 views
0

我有一個單元格,它具有三種不同形式的緯度和經度座標。單元格內的內容如下所示:正則表達式解析Excel或VBA腳本將文本分成兩行

35°21'N 81°47'W/35.35°N 81.79°W/35.35; -81.79(Ellenboro(1月11日,EF2))
38°46'N 85°28'W/38.76°N 85.46°W/38.76; -85.46(麥迪遜(1月17日,EF0))

我想只提取最後一組數字(35.35,-81.79),並把每一個在不同的行中,一個緯度和一個經度。

我該如何去做這件事?

+0

拆分()上'/',取所得到的數組的最後一個元件和拆分對'(' - 採取該陣列的第一個元素和分割上';' - 得到的數組有你的值 –

回答

3

如果你快樂,只是用公式 - 這裏是我的解決方案(假設原始字符串放置在列的起始A2):

  1. B2 (緯度):=TRIM(MID($A2,SEARCH("@",SUBSTITUTE($A2,"/","@",2))+1,SEARCH("@",SUBSTITUTE($A2,";","@"))-SEARCH("@",SUBSTITUTE($A2,"/","@",2))-1))
  2. C2(經度):=TRIM(MID($A2,SEARCH("@",SUBSTITUTE($A2,";","@"))+1,SEARCH("@",SUBSTITUTE($A2,"(","@"))-SEARCH("@",SUBSTITUTE($A2,";","@"))-1))
  3. 根據需要自動填充兩個公式。

這將返回結果爲字符串。如果你想讓他們作爲號碼 - 只需添加=VALUE(...)包裝到每個公式。但是,我的本地設置使用逗號作爲小數點分隔符,所以我必須再添加一個SUBSTITUTE來處理此問題。

爲方便起見樣本文件共享:https://www.dropbox.com/s/twkcln8lozdgga9/CoordsSplit.xlsx

+0

完美,我沒有意識到公式會對此有效,所以我要求正則表達式。謝謝 – Parseltongue

+0

@Parseltongue高興地幫忙!)坦率地說,我的「代碼」完全正確正如蒂姆·威廉姆斯在你的要求的評論中提到的那樣 –

0

開始通過更換:

\s+\(.* 

由空字符串。然後替換:

^.*/\s+ 

由空字符串組成。然後你只剩下最後一組數字,分開它們很容易(與\s*;\s*)。

演示用Perl:

$ perl -ne 's,\s+\(.*,,; s,^.*/\s+,,; my @coords = (split(/\s*;\s*/)); print "Latitude: $coords[0]; longitude: $coords[1]"' <<EOF 
> 35°21′N 81°47′W/35.35°N 81.79°W/35.35; -81.79 (Ellenboro (Jan. 11, EF2)) 
> 38°46′N 85°28′W/38.76°N 85.46°W/38.76; -85.46 (Madison (Jan. 17, EF0)) 
> EOF 
Latitude: 35.35; longitude: -81.79 
Latitude: 38.76; longitude: -85.46