R grep() 函数 - 模式匹配与搜索
R grep() 函数用于在字符串向量中搜索匹配指定模式的位置或值。
grepl() 是其逻辑版本,返回 TRUE/FALSE。两者都支持正则表达式。
grep() 函数语法格式如下:
grep(pattern, x, value = FALSE, ignore.case = FALSE) grepl(pattern, x, ignore.case = FALSE)
参数说明:
pattern 要匹配的模式(支持正则表达式)。
x 输入字符串向量。
value 是否返回匹配的值(TRUE),而不仅仅是索引(FALSE)。默认为 FALSE。
ignore.case 是否忽略大小写。
实例
fruits <- c("apple", "banana", "orange", "grape", "pineapple", "mango")
# grep: 返回包含 "ap" 的索引
print("包含 'ap' 的索引:")
print(grep("ap", fruits))
# grep with value: 返回匹配的值
print("包含 'ap' 的水果:")
print(grep("ap", fruits, value = TRUE))
# grepl: 返回逻辑向量
print("是否包含 'ap':")
print(grepl("ap", fruits))
# grep: 返回包含 "ap" 的索引
print("包含 'ap' 的索引:")
print(grep("ap", fruits))
# grep with value: 返回匹配的值
print("包含 'ap' 的水果:")
print(grep("ap", fruits, value = TRUE))
# grepl: 返回逻辑向量
print("是否包含 'ap':")
print(grepl("ap", fruits))
执行以上代码输出结果为:
[1] "包含 'ap' 的索引:" [1] 1 4 5 [1] "包含 'ap' 的水果:" [1] "apple" "grape" "pineapple" [1] "是否包含 'ap':" [1] TRUE FALSE FALSE TRUE TRUE FALSE
grepl() 配合逻辑索引可以筛选数据框中的行:
实例
# 包含邮箱的用户数据
df <- data.frame(
姓名 = c("张三", "李四", "王五", "赵六"),
邮箱 = c("zhang@runoob.com", "li@gmail.com",
"wang@runoob.com", "zhao@yahoo.com"),
stringsAsFactors = FALSE
)
# 筛选 runoob 邮箱的用户
runoob_users <- df[grepl("runoob", df$邮箱), ]
print("runoob 邮箱的用户:")
print(runoob_users)
df <- data.frame(
姓名 = c("张三", "李四", "王五", "赵六"),
邮箱 = c("zhang@runoob.com", "li@gmail.com",
"wang@runoob.com", "zhao@yahoo.com"),
stringsAsFactors = FALSE
)
# 筛选 runoob 邮箱的用户
runoob_users <- df[grepl("runoob", df$邮箱), ]
print("runoob 邮箱的用户:")
print(runoob_users)
执行以上代码输出结果为:
[1] "runoob 邮箱的用户:" 姓名 邮箱 1 张三 zhang@runoob.com 3 王五 wang@runoob.com

R 语言实例