正则表达式捕获组

Regular Expressions Capturing Groups

我正在尝试从 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)

我收到以下错误:

Error in stri_match_first_regex(string, pattern, opts_regex = opts(pattern)) : Incorrect Unicode property. (U_REGEX_PROPERTY_SYNTAX)

我的猜测是这个错误与 Regex 模式有关,但使用文档和网络搜索,我无法破译它。

如果我们需要字符串输出

sub(".*\/\s*", "", a)
#[1] "41.505; -81.608333 (Adelbert Hall)"

如果我们需要它作为单独的

strsplit(sub(".*\/\s*", "", a), ";\s*|\s*\(|\)")[[1]]
#[1] "41.505"        "-81.608333"    "Adelbert Hall"

当前代码存在几个问题:

  • (?#:...) 是仅当您将 x 修饰符传递给正则表达式时才允许的注释
  • \N shorthand 匹配任何非换行字符的字符不受 ICU regex library 支持(它支持匹配命名字符的 \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"