我试图从R(v3.4.1)中的字符串中提取纬度,经度和标签。我的想法是正则表达式是要走的路,而且由于 stringr 包能够提取捕获组,我认为这是要使用的包。问题是我收到了一个我无法解释的错误。任何帮助,将不胜感激。
以下是我想从中提取信息的字符串示例。我想抓住最后一组纬度(41.505)和经度(-81.608333)以及标签(Adelbert Hall)。
a <- "Case Western Reserve University campus41°30′18″N 81°36′30″W / 41.505°N 81.608333°W / 41.505; -81.608333 (Adelbert Hall)"
这是我为抓取我感兴趣的字段而创建的正则表达式。
coordRegEx <- "([\\d]*\\.\\d*)(?#Capture Latitude);\\h(-\\d*\\.\\d*)(?#Capture Longitude)\\N*\\((\\N*)(?#Capture Label)\\)"
现在,当我尝试使用:
匹配字符串中的正则表达式时s <- str_match(a,coordRegEx)
我收到以下错误:
stri_match_first_regex中的错误(字符串,模式,opts_regex = opts(模式)):不正确的Unicode属性。 (U_REGEX_PROPERTY_SYNTAX)
我的猜测是这个错误与Regex模式有关,但是使用文档和网络搜索,我无法解读它。
答案 0 :(得分:4)
目前的代码有几个问题:
(?#:...)
只有在您将x
修饰符传递给正则表达式时才允许使用\N
速记字符(它支持与命名字符匹配的\N{UNICODE CHARACTER NAME}
)。您可以将\N
替换为.
。查看您的固定方法:
> a <- "Case Western Reserve University campus41°30′18″N 81°36′30″W / 41.505°N 81.608333°W / 41.505; -81.608333 (Adelbert Hall)"
> coordRegEx <- "(?x)(\\d*\\.\\d*)(?#Capture Latitude);\\h(-\\d*\\.\\d*)(?#Capture Longitude).*\\((.*)(?#Capture Label)\\)"
> s <- str_match(a,coordRegEx)
> s
[,1] [,2] [,3] [,4]
[1,] "41.505; -81.608333 (Adelbert Hall)" "41.505" "-81.608333" "Adelbert Hall"
答案 1 :(得分:1)
如果我们需要字符串输出
sub(".*\\/\\s*", "", a)
#[1] "41.505; -81.608333 (Adelbert Hall)"
如果我们需要它作为单独的
strsplit(sub(".*\\/\\s*", "", a), ";\\s*|\\s*\\(|\\)")[[1]]
#[1] "41.505" "-81.608333" "Adelbert Hall"