Regex в R - извлечение двух букв между пробелами - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь извлечь две буквы между двумя пробелами -

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

, что кажется полной противоположностью того, что я хочу.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Команда gsub удаляет части текста, совпадающие с регулярным выражением.\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"

Здесь альтернатива .*\\s+([A-Z]{2})\\s.* соответствует этим входным даннымкоторые имеют двухбуквенное «слово» между пробелами и помещают слова в Группу 1 (\1), в то время как альтернатива .* сопоставляет все остальные входные данные, чтобы выдать пустой результат в виде операции sub.

Или вы можете использовать

library(stringr)
str_extract(x, "(?<=\\s)[A-Z]{2}(?=\\s)")
# => [1] "US" "JP" NA   "US"

Здесь (?<=\\s)[A-Z]{2}(?=\\s) соответствует и str_extract извлекает строки, которые являются первыми двухбуквенными словами между пробелами.

Если слова могут быть вначало / конец строки используют

str_extract(x, "(?<!\\S)[A-Z]{2}(?!\\S)")
0 голосов
/ 06 февраля 2019

Мы можем использовать 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"

или использовать str_extract для извлечения двух символов верхнего регистра после пробела (заданного поиском по регулярному выражению) и следования за границей слова (\\b)

str_extract(vec, "(?<=\\s)([A-Z]{2})\\b")
#[1] "US" "JP" NA   "US"

ПРИМЕЧАНИЕ. Не скопированный синтаксис из чужого ответа

data

vec <- c("AAPL US Equity", "1836 JP Equity", "APPLE SOMETHING NOT", "C US Equity")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...