首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegEx的难点

RegEx的难点
EN

Stack Overflow用户
提问于 2013-05-23 10:21:11
回答 3查看 193关注 0票数 0

我想从KML文件中提取一些纬度和经度值,如下所示:

代码语言:javascript
复制
      <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>

因此,您可以在文本中看到坐标的格式是:

代码语言:javascript
复制
(space*)longitude,latitude,altitude\n    // or
(space*)<coordinates>longitude,latitude,altitude</coordinates>\n

因此,为了捕捉纬度,没关系,我匹配:

代码语言:javascript
复制
@".*?,(.*?),.*?$" // matching index 1

对于经度,我使用了这样的模式:

代码语言:javascript
复制
@" * (<coordinates>)? (.*?),(.*?),(.*?)$" // matching index 2

我尝试了很多东西,包括最后一个模式,但是总是与相匹配:

代码语言:javascript
复制
"<coordinates>0.197118",
"0.197120"
"0.197060"
"0.198390"
"<coordinates>0.196763"

你明白了:我不想要<coordinates>

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

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-23 12:20:15

好吧,我在这里移动得太糟糕了,再站一个地方:

而不是:

代码语言:javascript
复制
@" * (<coordinates>)? (.*?),(.*?),(.*?)$"

我不得不这样做:

代码语言:javascript
复制
@" * (<coordinates>)?(.*?),(.*?),(.*?)$"

解决问题的方法!该…不需要xml解析器或其他东西。

票数 1
EN

Stack Overflow用户

发布于 2013-05-23 10:27:52

使用所有贪婪的修饰符使它变得过于复杂,请看一下只起作用的我这里的样本

代码语言:javascript
复制
(([0-9\.]+),([0-9\.]+),([0-9\.]+)[\w,]+)+

此外,我也同意您不应该使用regexps来解析XML,但是如果它大大缩短了您的代码,并且您不需要源文件中的任何其他内容,那么它可以是一个可接受的快速攻击。

票数 0
EN

Stack Overflow用户

发布于 2013-05-23 10:30:16

如果您真的想使用regexp,请尝试一个非贪婪的:@".*?“。匹配之后,您应该遍历结果并删除标记。左边的字符串可以用@“、”来分隔。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16711382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档