Вы можете использовать ^[[:alpha:]]
, чтобы найти с помощью grep
, если оно начинается с символа.
unlist(lapply(strsplit(x$Column1, " \\| "), function(x)
grep("^[[:alpha:]]", x, value = TRUE)[1]))
#[1] NA "E1.3" "G1.2" NA "I.1" "H1.256"
Если нет окружающих пробелов:
unlist(lapply(strsplit(x$Column1, "\\|"), function(x)
grep("^[[:alpha:]]", trimws(x), value = TRUE)[1]))
И в В случае, если в каждой строке более одного совпадения (с ""
вместо NA
):
unlist(lapply(strsplit(x$Column1, " \\| "), function(x)
paste(grep("^[[:alpha:]]", x, value = TRUE), collapse = " | ")))
или с использованием sub
:
sub("^.*\\b([[:alpha:]][^ ]+).*$|.*", "\\1", x$Column1)
Или с использованием regexec
и regmatches
tt <- regmatches(x$Column1, regexec("\\b[[:alpha:]][^ ]*", x$Column1))
tt[lengths(tt)==0] <- NA;
unlist(tt)