我想从KML文件中提取一些纬度和经度值,如下所示:
<coordinates>0.197118,48.003719,0.000000</coordinates>
// ...
<coordinates>
0.197120,48.003719,0.000000
0.197060,48.003792,0.000000
0.198390,48.004059,0.000000
</coordinates>
// ...
<coordinates>0.196763,48.003162,0.000000</coordinates>
所以你可以在文中看到坐标的格式是:
(space*)longitude,latitude,altitude\n // or
(space*)<coordinates>longitude,latitude,altitude</coordinates>\n
所以要抓住纬度,没关系,我匹配:
@".*?,(.*?),.*?$" // matching index 1
对于经度,我使用的模式:
@" * (<coordinates>)? (.*?),(.*?),(.*?)$" // matching index 2
我尝试了很多东西,包括最后一个模式,但我总是得到匹配:
"<coordinates>0.197118",
"0.197120"
"0.197060"
"0.198390"
"<coordinates>0.196763"
你明白了:我不想要<coordinates>
。
@" * (<coordinates>)? (.*?),(.*?),(.*?)$"
出了什么问题?
感谢。
答案 0 :(得分:1)
好的,我在这里搬家,只剩下一个空间了:
而不是:
@" * (<coordinates>)? (.*?),(.*?),(.*?)$"
我必须这样做:
@" * (<coordinates>)?(.*?),(.*?),(.*?)$"
解决了这个问题!不需要xml解析器或其他东西...
答案 1 :(得分:0)
您使用所有贪婪修饰符过度复杂化,请查看仅适用的my sample here:
(([0-9\.]+),([0-9\.]+),([0-9\.]+)[\w,]+)+
另外,我确实同意你不应该使用regexp来解析XML,但如果它大大缩短你的代码并且你不需要源文件中的任何其他内容,那么它可能是一个可接受的快速入侵。
答案 2 :(得分:0)
如果您真的想使用正则表达式,请尝试非贪婪: @ “*?”。匹配后,您应该遍历结果并删除标记。左边的字符串可以除以@“,”