x <- c("lkas32kj_123_3.21", "lkas32kj_123_3.21|l3kj_12_0.21|123e_4_32.1", "+++NO+++") rx <- "[[:alnum:]]+(?:_\\d+){2}(?:\\.\\d+)?" grepl(paste0("^", rx, "(?:\\|", rx ,")*$"), x)