r - 为坐标选择正确的正则表达式

标签 r regex decimal coordinates dms

我有各种格式的坐标,并尝试获得或多或少通用的转换例程。

为此,我尝试使用正则表达式解析字符串的各个元素,并尝试通过字符串中出现的索引来获取度、分和秒的各个信息。

对于某些人来说它有效......但不适用于所有人。我非常确信我的问题与我对正则表达式的有限理解密切相关。

因此问题是:谁对正则表达式模式有更好的理解并且可以提供帮助?

我尝试编译一小段代码来演示该问题。运行下面的示例显示我得到了前四个和最后三个坐标的三个分量。其余部分 - 中间 - 仅提供 2 个组件......

coords = c("-53°30''30.54'",
       "s55°30' 30.54",
       "55°30'30.54n",
       "0°1 0.5S",
       "-0°30'30''s",
       "S55 30 30",
       "-55°30'30''",
       "-55° 30' 30''",
       "-55°   30'   30",
       "-55 sometimes with text rests 30 30''",
       "55°30'30,54S",
       "S55° 30' 30,54",
       "-55° 30' 30.54''"
       )

for (i in 1:length (coords)) {
    pattern   <- gregexpr ("[0-9.]+", coords [i])
    print (as.character (unique (unlist (regmatches (coords [i], pattern)))))
}


<Output>
[1] "53"    "30"    "30.54"
[1] "55"    "30"    "30.54"
[1] "55"    "30"    "30.54"
[1] "0"   "1"   "0.5"
[1] "0"  "30"
[1] "55" "30"
[1] "55" "30"
[1] "55" "30"
[1] "55" "30"
[1] "55" "30"
[1] "55" "30" "54"
[1] "55" "30" "54"
[1] "55"    "30"    "30.54"

下面的正则表达式是一个令人印象深刻的怪物;-) 然而,当坐标的格式略有不同(例如 dec_deg)时,它会出现一些问题。在这种情况下,无法正确识别字符串的第一个或第二个数字。我刚刚编译了一个包含这样坐标的列表:

坐标 = c("-53°30''30.54'", “s55°30' 30.54”, “55°30'30.54n”, “0°1 0.5S”, “-0°30'30''s”, “S55 30 30”, “-55°30'30''”, “-55°30'30''”, “-55°30'30”, “-55 有时文本休息 30 30''”, “55°30'30,54S”, “S55° 30' 30,54”, “-55°30'30.54''”, “-55.5432 30 30.54”, “-55.30.30”, “55.555”, “55,555S”, “S55,555”, “S55.555”, “55,555°S”, “55.555°”, “-55,555”, “-55.555”

       )

最佳答案

它似乎与stringr一起工作正常...

library(stringr)
str_extract_all(str_replace_all(coords, ",", "."), "[0-9.\\-]+")

[[1]]
[1] "-53"   "30"    "30.54"

[[2]]
[1] "55"    "30"    "30.54"

[[3]]
[1] "55"    "30"    "30.54"

[[4]]
[1] "0"   "1"   "0.5"

[[5]]
[1] "-0" "30" "30"

[[6]]
[1] "55" "30" "30"

[[7]]
[1] "-55" "30"  "30" 

[[8]]
[1] "-55" "30"  "30" 

[[9]]
[1] "-55" "30"  "30" 

[[10]]
[1] "-55" "30"  "30" 

[[11]]
[1] "55"    "30"    "30.54"

[[12]]
[1] "55"    "30"    "30.54"

[[13]]
[1] "-55"   "30"    "30.54"

关于r - 为坐标选择正确的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64228649/

相关文章:

r - R中行的有序分组

r - 使用 R 中的模拟从 OHLC 生成刻度数据

r - 如何在 R 中将图像上传到 SQL Server

regex - 如何在 Vim 语法中突出显示以 ‘@’ 开头的单词?

python - 如何在 Python(版本 3)中对小数使用传统舍入?

sql - 格式化具有任意小数位的 SQL 数字查询结果

R - 在绘图中处理长标签

javascript - 用于查找关键字之间的模式并将其存储在组中的正则表达式

python - 在哪里为 Django 项目设置 Python 环境属性?

电影片名和评级的 Ruby 正则表达式