0

我想从 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>)? (.*?),(.*?),(.*?)$"

谢谢。

4

3 回答 3

1

好吧,我在这里的举动太糟糕了,只剩下一个空间了:

代替 :

@" * (<coordinates>)? (.*?),(.*?),(.*?)$"

我必须做 :

@" * (<coordinates>)?(.*?),(.*?),(.*?)$"

那解决问题!不需要 xml 解析器或其他东西……</p>

于 2013-05-23T12:20:15.447 回答
0

如果您真的想使用正则表达式,请尝试非贪婪:@".*?"。匹配后,您应该遍历结果并删除标签。剩下的字符串可以用@","

于 2013-05-23T10:30:16.310 回答
0

您使用所有贪婪修饰符使其过于复杂,请查看我在这里的示例,它只是有效的:

(([0-9\.]+),([0-9\.]+),([0-9\.]+)[\w,]+)+

另外,我同意您通常不应该使用正则表达式解析 XML,但如果它大大缩短了您的代码并且您不需要源文件中的任何其他内容,那么它可能是一种可以接受的快速破解。

于 2013-05-23T10:27:52.683 回答