Большое спасибо, r2evans, удаление этих трех символов с помощью gsub значительно упрощает задачу. Также узнаем о perl. Это не полностью решает мою проблему, так как я бы хотел, чтобы что-то вроде этого также работало:
x <- "epsi 1000,00€ lorem"
y <- "1000"
Учитывая, что y было numeri c преобразовано в текст, у него не будет десятичных знаков в круглых числах , но счет-фактура вполне может. Я выберу небольшую адаптацию к этому:
fn.catch <- function(x,y) {
y2 <- ifelse(grepl(".", y, fixed = TRUE), y, paste0(y, ".00"))
return(
grepl(paste0("(?!=[0-9])", gsub("[[:space:],.]", "", y ), "(?![0-9])"), gsub("[[:space:],.]", "", x), perl = TRUE)
|
grepl(paste0("(?!=[0-9])", gsub("[[:space:],.]", "", y2), "(?![0-9])"), gsub("[[:space:],.]", "", x), perl = TRUE)
)
}
только для справки о том, что делает функция: переменная y2 является копией y с десятичными знаками «.00», если y изначально не Функция have them затем проверит, находится ли Y или Y2 на X, удаляя любые " "
, ","
или "."
из X, Y и Y2. "(?!=[0-9])"
и perl = true
затем будут следить за тем, чтобы символы до и после найденного числа не были также числами, поэтому что-то вроде «1» не находится в «313»
К сожалению, это все еще не 100% защита от дурака поскольку он не защитит меня от неуместных десятичных знаков, скажем:
x <- "epsi 1234,56€ lorem"
y <- "12345.6"
(вернет ИСТИНА, когда это явно была человеческая ошибка), но я бы сказал, что он поймает почти все, большое спасибо @ r2evans