我有一个包含
等字符元素的向量 "2-CONTROL", "DAN-COLOR", "3M", "DIPLOMVEJ 373", "ABE 34 HUN"
我想过滤掉字符串中具有独立数字的元素。如果数字附加到字母或连字符,则不应过滤。
上述向量将在过滤后给出以下结果。
"2-CONTROL", "DAN-COLOR", "3M"
我尝试在grepl中使用"\\b\\d+\\b"
,但它也会过滤掉"2-CONTROL"
答案 0 :(得分:2)
1)用X替换不是数字而不是空格的每个字符,然后使用正则表达式:
pat <- "\\b\\d+\\b" # from question
x[!grepl(pat, gsub("[^[:space:][:digit:]]", "X", x))]
## [1] "2-CONTROL" "DAN-COLOR" "3M"
2)另一种可能性是拆分空格并拒绝包含所有数字元素的任何内容。
x[sapply(strsplit(x, "\\s+"), function(x) !any(grepl("^\\d+$", x)))]
## [1] "2-CONTROL" "DAN-COLOR" "3M"
答案 1 :(得分:0)
对于tidyverse
方法,请使用stringr::str_detect()
:
library(stringr)
strings <- c("2-CONTROL", "DAN-COLOR", "3M", "DIPLOMVEJ 373", "ABE 34 HUN")
pattern <- " \\d+ ?" # match free-standing integers
strings[!str_detect(strings, pattern)]
# [1] "2-CONTROL" "DAN-COLOR" "3M"
答案 2 :(得分:-1)
否定逻辑似乎有效:
regexp <- "\\d{2,}"
x <- c("2-CONTROL", "DAN-COLOR", "3M", "DIPLOMVEJ 373", "ABE 34 HUN")
res <- x[!grepl(regexp, x)]
res
# "2-CONTROL" "DAN-COLOR" "3M"