R语言 字符串匹配
字符串匹配是任何语言的一个重要方面。它在查找、替换和删除字符串方面非常有用。为了理解R语言中的字符串匹配,我们首先要了解R语言中的相关功能。为了做到这一点,我们可以使用匹配字符串或正则表达式。正则表达式是一个包含特殊符号和字符的字符串,用于从给定的数据中寻找和提取所需的信息。正则表达式基本上是包含字符和特殊符号的字符串。要了解更多关于正则表达式的信息.
关于字符串匹配的操作
寻找一个字符串
为了在一个字符串中搜索一个特定的模式,我们可以使用许多函数。如果我们需要找到所需字符串/模式的位置,我们可以使用grep()方法。另一方面,如果我们只需要知道模式是否存在,我们可以使用逻辑函数grepl(),根据结果返回True或False。让我们进一步了解这些方法。
- grep() function: 它返回在向量中找到该模式的索引。如果该模式有多个出现,它会返回一个出现的索引列表。这非常有用,因为它不仅告诉我们模式的出现,而且还告诉我们它在矢量中的位置。
语法:
grep(pattern, string, ignore.case=FALSE)
参数:
pattern: 一个正则表达式模式。
string:要搜索的字符向量。
ignore.case: 是否在搜索中忽略大小写。这里ignore.case是一个可选的参数,默认设置为FALSE。
示例 1:查找字符串中所有 “he “的实例。
str <- c("Hello", "hello", "hi", "hey")
grep('he', str)
输出:
[1] 2 4
正如你注意到的,在上面的例子中,’He’没有被考虑,因为’H’和’h’的情况不同。但是如果你想忽略这些情况,可以将参数ignore.case设为True,默认设置为False。
示例2:要在字符串中找到所有’he’的实例,而不考虑大小写。
str <- c("Hello", "hello", "hi", "hey")
grep('he', str, ignore.case ="True")
输出:
[1] 1 2 4
- grepl() function: 它是一个逻辑函数,如果在向量中找到指定的模式,则返回True,如果没有找到,则返回false。
语法:
grepl(pattern, string, ignore.case=FALSE)
参数:
pattern: 一个正则表达式模式。
string:要搜索的字符向量。
ignore.case: 是否在搜索中忽略大小写。这里ignore.case是一个可选的参数,默认设置为FALSE。
示例 1:查找字符串中是否存在 “the “的实例。
str <- c("Hello", "hello", "hi", "hey")
grepl('the', str)
输出:
[1] FALSE
示例 2: 查找字符串中是否有’he’的实例。
str <- c("Hello", "hello", "hi", "hey")
grepl('he', str)
输出:
[1] TRUE
- regexpr() function: 它在字符串的每个元素中搜索一个模式的出现。例如,如果一个向量由’n’个字符串组成,所有’n’个字符串都会被搜索到该模式。如果找到该模式,将返回该模式的索引。如果没有找到,则返回-1。因此,返回的输出向量的大小等于输入的大小。
语法:
regexpr(pattern, string, ignore.case = FALSE)
参数:
pattern: 一个正则表达式模式。
string:要搜索的字符向量,其中每个元素都被单独搜索。
ignore.case:是否在搜索中忽略大小写。这里ignore.case是一个可选的参数,默认情况下被设置为FALSE。
示例 1:查找矢量中每个字符串中是否有 “he “的实例。
str <- c("Hello", "hello", "hi", "ahey")
regexpr('he', str)
输出:
[1] -1 1 -1 2
示例 2: 找出矢量的每个字符串中是否有以元音开头的单词实例。
str <- c("abra", "Ubra", "hunt", "quirky")
regexpr('^[aeiouAEIOU]', str)
输出:
[1] 1 1 -1 -1
示例 3: 要找出每个字符串是否属于矢量的’10+1’模式。
str <- c("1001", "11", "10012", "101")
regexpr('10 + 1$', str)
输出:
[1] 1 -1 -1 1
查找和替换字符串
为了搜索和替换一个特定的字符串,我们可以使用两个函数,即 sub() 和 gsub()。 sub只替换要替换的字符串的第一次出现,并返回修改后的字符串。另一方面,gsub()替换要替换的字符串的所有出现,并返回修改后的字符串。
语法:
sub(pattern, replaced_string, string)
gsub(pattern, replaced_string, string)
参数:
pattern: 正则表达式模式。
string: 要搜索被替换的模式实例的向量。
ignore.case: 在搜索中是否忽略大小写。这里ignore.case是一个可选的参数,默认设置为FALSE。
例子1: 用 “aa “替换第一次出现的 “he”。
str = "heutabhe"
sub('he', 'aa', str)
输出
aautabhe
例2: 用 “aa “替换所有出现的 “he”。
str = "heutabhe"
gsub('he', 'aa', str)
输出
[1] "aautabaa"
查找和删除字符串
为了搜索和删除一个特定的字符串/图案,我们可以使用两个函数,即str_remove()和str_remove_all()。str_remove()删除要删除的字符串/图案的唯一第一次出现,并返回修改后的字符串。str_remove_all()则删除要删除的字符串的所有出现并返回修改后的字符串。
语法:
str_remove(string, pattern, ignore.case=False)
参数:
pattern: 正则表达式模式。
string: 要搜索要删除的模式实例的字符向量。
ignore.case: 在搜索中是否忽略大小写。这里ignore.case是一个可选的参数,默认设置为FALSE。
例子1: 删除矢量中第一次出现的元音字母
library(stringr)
x <- c("apple", "pear", "banana")
str_remove(x, "[aeiou]")
输出
[1] "pple" "par" "bnana"
例2: 去除矢量中出现的所有元音
library(stringr)
x <- c("apple", "pear", "banana")
str_remove_all(x, "[aeiou]")
输出
[1] "ppl" "pr" "bnn"