如何同时使用ignore.case和endsWith?

如何同时使用ignore.case和endsWith?,r,regex,R,Regex,这是我的数据框架: df您可以将(?i)c$(基本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 (?i)c$表示: (?i)-忽略.大小写内联修饰符标志 c-文字字符 $-字符串结束标记 所以您只想保留b列

这是我的数据框架:

df您可以将
(?i)c$
(基本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
(?i)c$
表示:

  • (?i)
    -
    忽略.大小写
    内联修饰符标志
  • c
    -文字字符
  • $
    -字符串结束标记

所以您只想保留
b
列的元素以c结尾的行?
df[grepl(.*c$”,df$b,ignore.case=TRUE),]
@Gainz没错。@deepseefan然后d.b的注释就是您必须做的事情!我会自己使用
df[grepl(“ac”,df[[“b”]])| grepl(“ac”,df[[“b”]]),]
。@Gainz,但如果可能的话,我正在寻找一种使用
endsWidth
的解决方案。我怎么可能没有想到
tolower(df$b)
touper(df$b)
。这正是我所需要的。谢谢你@d.b
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
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(