Regex R正则表达式中的负前瞻
我有一个文本位置:Regex R正则表达式中的负前瞻,regex,r,Regex,R,我有一个文本位置: locality <- "NEAR HAENA BEACH PARK, N 22 13 W 159 34 500 meters from coast" 看起来有几个方面不起作用。在第二个位置,秒数没有被拾取。此外,前瞻不应该影响最后一个位置,但它确实影响了(但这可能与秒的问题相同)。可能是您可以试试这个 location_N <- which(strsplit(locality, "\\s")[[1]]=="N") stringr::word(locality,
locality <- "NEAR HAENA BEACH PARK, N 22 13 W 159 34 500 meters from coast"
看起来有几个方面不起作用。在第二个位置,秒数没有被拾取。此外,前瞻不应该影响最后一个位置,但它确实影响了(但这可能与秒的问题相同)。可能是您可以试试这个
location_N <- which(strsplit(locality, "\\s")[[1]]=="N")
stringr::word(locality,location_N,location_N+5)
location\u N可能是您可以试试这个
location_N <- which(strsplit(locality, "\\s")[[1]]=="N")
stringr::word(locality,location_N,location_N+5)
location\N看起来比实际需要复杂得多。这不管用吗<代码>([NS]\\d+\\d+)([EW]\\d+\\d+)
在这种情况下,是的,这是可行的,但我试图写得更灵活一些,例如这里只有度和分,但也可能有秒,可能有小数,它们的顺序可能不同,等等。(\\s|\\b)怎么样
不同于\\b
?模式N(\\s|\\b)| s(\\s|\\b)| E(\\s|\\b)| W(\\s|\\b)
,应该是[NSEW]\\b
对吗?没错。我还在学习正则表达式的工作原理。顺便说一句,使用你的建议解决了这篇文章的问题@Pierrelaffortune:必须使用字母后面的空格,因此我们需要\s
(或\s+
)。我们当然不需要两者兼而有之@帕斯卡,举几个例子怎么样?看起来比实际需要复杂得多。这不管用吗<代码>([NS]\\d+\\d+)([EW]\\d+\\d+)
在这种情况下,是的,这是可行的,但我试图写得更灵活一些,例如这里只有度和分,但也可能有秒,可能有小数,它们的顺序可能不同,等等。(\\s|\\b)怎么样
不同于\\b
?模式N(\\s|\\b)| s(\\s|\\b)| E(\\s|\\b)| W(\\s|\\b)
,应该是[NSEW]\\b
对吗?没错。我还在学习正则表达式的工作原理。顺便说一句,使用你的建议解决了这篇文章的问题@Pierrelaffortune:必须使用字母后面的空格,因此我们需要\s
(或\s+
)。我们当然不需要两者兼而有之@帕斯卡,举几个例子怎么样?
locality <- c(
"NEAR HAENA BEACH PARK, N 22 13 W 159 34 500 meters from coast",
"NEAR HAENA BEACH PARK, N 22 13 45 W 159 34 23 500 meters from coast",
"NEAR HAENA BEACH PARK, N 22 13 12.32 W 159 34 500.4 meters from coast",
"NEAR HAENA BEACH PARK, E 22 13 S 159 34 500 meters from coast",
"NEAR HAENA BEACH PARK, N 22 13' W 159 34' 500 meters from coast",
"NEAR HAENA BEACH PARK, N 22 13' W 159 34' 500 km from coast"
"NEAR HAENA BEACH PARK, N 22 13' W 159 34' 500 distance from coast"
)
regex <- "[NSEW]\\b([0-9]*\\.?[0-9]+)?(\\$O)?(\\s)?[0-9]*\\.?[0-9]+(\\')?(\\$O)?\\s([0-9]*\\.?[0-9]+(\\')?)(?!\\sMI\\b|KM\\b|M\\b|MILES|KILOMETERS|METERS)"
> capture <- gregexpr(regex, locality[1], ignore.case = TRUE, perl = TRUE)
> regmatches(locality[1], capture)
[[1]]
[1] "N 22 13" "W 159 34"
>
> capture <- gregexpr(regex, locality[2], ignore.case = TRUE, perl = TRUE)
> regmatches(locality[2], capture)
[[1]]
[1] "N 22 13" "W 159 34"
>
> capture <- gregexpr(regex, locality[3], ignore.case = TRUE, perl = TRUE)
> regmatches(locality[3], capture)
[[1]]
[1] "N 22 13" "W 159 34"
>
> capture <- gregexpr(regex, locality[4], ignore.case = TRUE, perl = TRUE)
> regmatches(locality[4], capture)
[[1]]
[1] "E 22 13" "S 159 34"
>
> capture <- gregexpr(regex, locality[5], ignore.case = TRUE, perl = TRUE)
> regmatches(locality[5], capture)
[[1]]
[1] "N 22 13'" "W 159 34'"
>
> capture <- gregexpr(regex, locality[6], ignore.case = TRUE, perl = TRUE)
> regmatches(locality[6], capture)
[[1]]
[1] "N 22 13'" "W 159 34'"
>
> capture <- gregexpr(regex, locality[7], ignore.case = TRUE, perl = TRUE)
> regmatches(locality[7], capture)
[[1]]
[1] "N 22 13'" "W 159 34'"
location_N <- which(strsplit(locality, "\\s")[[1]]=="N")
stringr::word(locality,location_N,location_N+5)