Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex R正则表达式中的负前瞻_Regex_R - Fatal编程技术网

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)