正则表达式捕获组
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"
我正在尝试从 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"