Вы можете использовать (?i)c$
TRE (библиотека регулярных выражений по умолчанию в базовых функциях регулярных выражений R) с grepl
:
df <- data.frame(a = c(1,2,3), b = c("aC", "ab", "ac"), stringsAsFactors = F)
df[grepl("(?i)c$", df$b),]
# a b
#1 1 aC
#3 3 ac
Если у вас динамическая шаблон со специальными символами регулярных выражений, которые вы могли бы сначала избежать этого.Чтобы проверить, заканчивается ли строка на C.
, c)
или c(
, вы можете использовать:
regex.escape <- function(string) {
gsub("([][{}()+*^$|\\\\?.])", "\\\\\\1", string)
}
vals <- c("C.", "c)", "c(")
rx <- paste0("(?i)(?:", paste(regex.escape(vals), collapse="|"), ")$") # => "(?i)(?:C\\.|c\\)|c\\()$"
df <- data.frame(a = c(1,2,3,4), b = c("C.", "c)", "c(", "c"), stringsAsFactors = F)
df[grepl(rx, df$b),]
# a b
# 1 1 C.
# 2 2 c)
# 3 3 c(
(?i)c$
означает:
(?i)
- ignore.case
флаг встроенного модификатора c
- буквенный символ $
- маркер конца строки.