我想从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>)? (.*?),(.*?),(.*?)$"怎么了?
谢谢。
发布于 2013-05-23 12:20:15
好吧,我在这里移动得太糟糕了,再站一个地方:
而不是:
@" * (<coordinates>)? (.*?),(.*?),(.*?)$"我不得不这样做:
@" * (<coordinates>)?(.*?),(.*?),(.*?)$"解决问题的方法!该…不需要xml解析器或其他东西。
发布于 2013-05-23 10:27:52
使用所有贪婪的修饰符使它变得过于复杂,请看一下只起作用的我这里的样本:
(([0-9\.]+),([0-9\.]+),([0-9\.]+)[\w,]+)+此外,我也同意您不应该使用regexps来解析XML,但是如果它大大缩短了您的代码,并且您不需要源文件中的任何其他内容,那么它可以是一个可接受的快速攻击。
发布于 2013-05-23 10:30:16
如果您真的想使用regexp,请尝试一个非贪婪的:@".*?“。匹配之后,您应该遍历结果并删除标记。左边的字符串可以用@“、”来分隔。
https://stackoverflow.com/questions/16711382
复制相似问题