Excel或VBA脚本中的RegEx分析将文本分成两行

我有一个有三种不同forms的纬度和经度坐标的单元格。 单元格内的内容如下所示:

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),并把每一个放在不同的行,一个是纬度,一个是经度。

我怎么去做这个?

如果你喜欢使用公式 – 这是我的解决scheme(假设原来的string放在A列A2开始):

  1. =TRIM(MID($A2,SEARCH("@",SUBSTITUTE($A2,"/","@",2))+1,SEARCH("@",SUBSTITUTE($A2,";","@"))-SEARCH("@",SUBSTITUTE($A2,"/","@",2))-1))
  2. =TRIM(MID($A2,SEARCH("@",SUBSTITUTE($A2,";","@"))+1,SEARCH("@",SUBSTITUTE($A2,"(","@"))-SEARCH("@",SUBSTITUTE($A2,";","@"))-1)) )) =TRIM(MID($A2,SEARCH("@",SUBSTITUTE($A2,";","@"))+1,SEARCH("@",SUBSTITUTE($A2,"(","@"))-SEARCH("@",SUBSTITUTE($A2,";","@"))-1))
  3. 根据需要自动填充这两个公式。

这将返回结果作为string 。 如果你想要他们作为数字 – 只需添加=VALUE(...)包装到每个公式。 但是,我的本地设置使用逗号作为小数分隔符,所以我必须再添加一个SUBSTITUTE来处理这个问题。

为了您的方便,示例文件是共享的: https : //www.dropbox.com/s/twkcln8lozdgga9/CoordsSplit.xlsx

首先replace:

 \s+\(.* 

由空string。 然后replace:

 ^.*/\s+ 

由空string。 你将只剩下最后一组数字,分裂他们很容易(用\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