RegEx的困难

时间:2013-05-23 10:21:11

标签: objective-c regex nsregularexpression

我想从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>)? (.*?),(.*?),(.*?)$"出了什么问题?

感谢。

3 个答案:

答案 0 :(得分:1)

好的,我在这里搬家,只剩下一个空间了:

而不是:

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

我必须这样做:

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

解决了这个问题!不需要xml解析器或其他东西...

答案 1 :(得分:0)

您使用所有贪婪修饰符过度复杂化,请查看仅适用的my sample here

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

另外,我确实同意你不应该使用regexp来解析XML,但如果它大大缩短你的代码并且你不需要源文件中的任何其他内容,那么它可能是一个可接受的快速入侵。

答案 2 :(得分:0)

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