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开始):
-
=TRIM(MID($A2,SEARCH("@",SUBSTITUTE($A2,"/","@",2))+1,SEARCH("@",SUBSTITUTE($A2,";","@"))-SEARCH("@",SUBSTITUTE($A2,"/","@",2))-1))
。 -
=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))
。 - 根据需要自动填充这两个公式。
这将返回结果作为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