【发布时间】:2018-01-09 22:16:35
【问题描述】:
我正在研究一个匹配许多不同类型的位置坐标的正则表达式。到目前为止,它匹配了大约 90% 的格式:
([SNsn][\\s]*)?((?:[\\+-]?[0-9]*[\\.,][0-9]+)|(?:[\\+-]?[0-9]+))(?:(?:[^ms'′""″,\\.\\dNEWnew]?)|(?:[^ms'′""″,\\.\\dNEWnew]+((?:[\\+-]?[0-9]*[\\.,][0-9]+)|(?:[\\+-]?[0-9]+))(?:(?:[^ds°""″,\\.\\dNEWnew]?)|(?:[^ds°""″,\\.\\dNEWnew]+((?:[\\+-]?[0-9]*[\\.,][0-9]+)|(?:[\\+-]?[0-9]+))[^dm°'′,\\.\\dNEWnew]*))))([SNsn]?)[^\\dSNsnEWew]+([EWew][\\s]*)?((?:[\\+-]?[0-9]*[\\.,][0-9]+)|(?:[\\+-]?[0-9]+))(?:(?:[^ms'′""″,\\.\\dNEWnew]?)|(?:[^ms'′""″,\\.\\dNEWnew]+((?:[\\+-]?[0-9]*[\\.,][0-9]+)|(?:[\\+-]?[0-9]+))(?:(?:[^ds°""″,\\.\\dNEWnew]?)|(?:[^ds°""″,\\.\\dNEWnew]+((?:[\\+-]?[0-9]*[\\.,][0-9]+)|(?:[\\+-]?[0-9]+))[^dm°'′,\\.\\dNEWnew]*))))([EWew]?)
测试格式:
北纬 45° 55.732 西经 122° 29.882
北纬 047° 38.938',西经 122° 20.887'
40.123, -74.123
40.123° N 74.123° W
40° 7´ 22.8" N 74° 7´ 22.8" W
40° 7.38' , -74° 7.38'
N40°7'22.8,W74°7'22.8"
40°7'22.8"N,74°7'22.8"W
40 7 22.8, -74 7 22.8
40.123 -74.123
40.123°,-74.123°
144442800, -266842800
40.123N74.123W
4007.38N7407.38W
40°7'22.8"N,74°7'22.8"W
400722.8N740722.8W
北 40 7.38 西 74 7.38
40:7:23N,74:7:23W
40:7:22.8N 74:7:22.8W
40°7'23"N 74°7'23"W
40°7'23" -74°7'23"
40d 7' 23" N 74d 7' 23" W
40.123N 74.123W
40° 7.38, -74° 7.38
测试是否有效:https://regexr.com/3ivu2
如您所见,空格和逗号存在问题,导致正则表达式与其中某些格式不匹配。
我正在尝试匹配坐标字符串,以便它们可以在我的iOS 应用程序中突出显示并允许用户点击它们。
如何更新正则表达式并修复匹配问题?
【问题讨论】:
-
您是要验证坐标还是捕获零件?
-
您不需要使用反斜杠对 [] 方括号内的字符进行转义。您实际上是在有效字符列表中包含反斜杠。
-
在您的正则表达式中,我没有看到任何匹配失败。我错过了吗?
-
其中一些格式与其他格式完全不同,试图将它们与单个模式匹配是一种毫无意义的练习。如果我是你,我会为每种坐标格式想出多个简单的模式。
-
@CAustin 我的问题是我对正则表达式知之甚少,不知道该怎么做。 :(
标签: regex string-matching