Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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
R中的正则表达式-在空格之间提取两个字母_R_Regex - Fatal编程技术网

R中的正则表达式-在空格之间提取两个字母

R中的正则表达式-在空格之间提取两个字母,r,regex,R,Regex,我试图提取两个空格之间的两个字母- AAPL US Equity 1836 JP Equity APPLE SOMETHING NOT C US Equity 结果- US JP US 我尝试的是gsub(\\s[A-Z]{2}\\s',“\\1”,vec)但这让我- AAPLEquity 1836Equity APPLE SOMETHING NOT CEquity 这似乎与我想要的正好相反。我们可以使用sub out <- rep("", length(vec

我试图提取两个空格之间的两个字母-

AAPL US Equity
1836 JP Equity
APPLE SOMETHING NOT
C US Equity
结果-

US
JP

US
我尝试的是
gsub(\\s[A-Z]{2}\\s',“\\1”,vec)
但这让我-

AAPLEquity
1836Equity
APPLE SOMETHING NOT
CEquity

这似乎与我想要的正好相反。

我们可以使用
sub

out <- rep("", length(vec))
i1 <- grepl("\\b[A-Z]{2}\\b", vec)

out[i1] <- sub(".*\\s+([A-Z]{2})\\s+.*", "\\1", vec[i1])
out
#[1] "US" "JP" ""   "US"
注意:不要从别人的答案中复制语法

数据
vecgsub
命令删除与正则表达式匹配的文本部分
\s[A-Z]{2}\s
查找空白、2个大写ASCII字母和空白,并将其从字符向量中删除

你可以用

x <- c('AAPL US Equity','1836 JP Equity','APPLE SOMETHING NOT','C US Equity')
sub(".*\\s+([A-Z]{2})\\s.*|.*", "\\1", x)
# => [1] "US" "JP" ""   "US"
这里,
(?
vec <- c("AAPL US Equity", "1836 JP Equity", "APPLE SOMETHING NOT", "C US Equity")
x <- c('AAPL US Equity','1836 JP Equity','APPLE SOMETHING NOT','C US Equity')
sub(".*\\s+([A-Z]{2})\\s.*|.*", "\\1", x)
# => [1] "US" "JP" ""   "US"
library(stringr)
str_extract(x, "(?<=\\s)[A-Z]{2}(?=\\s)")
# => [1] "US" "JP" NA   "US"
str_extract(x, "(?<!\\S)[A-Z]{2}(?!\\S)")