R语言 字符串匹配
字符串匹配是任何语言的一个重要方面。它在查找、替换和删除字符串方面非常有用。为了理解R语言中的字符串匹配,我们首先要了解R语言中的相关功能。为了做到这一点,我们可以使用匹配字符串或正则表达式。正则表达式是一个包含特殊符号和字符的字符串,用于从给定的数据中寻找和提取所需的信息。正则表达式基本上是包含字符和特殊符号的字符串。要了解更多关于正则表达式的信息.
关于字符串匹配的操作
寻找一个字符串
为了在一个字符串中搜索一个特定的模式,我们可以使用许多函数。如果我们需要找到所需字符串/模式的位置,我们可以使用grep()方法。另一方面,如果我们只需要知道模式是否存在,我们可以使用逻辑函数grepl(),根据结果返回True或False。让我们进一步了解这些方法。
- grep() function: 它返回在向量中找到该模式的索引。如果该模式有多个出现,它会返回一个出现的索引列表。这非常有用,因为它不仅告诉我们模式的出现,而且还告诉我们它在矢量中的位置。
语法:
grep(pattern, string, ignore.case=FALSE)
参数:
pattern: 一个正则表达式模式。
string:要搜索的字符向量。
ignore.case: 是否在搜索中忽略大小写。这里ignore.case是一个可选的参数,默认设置为FALSE。
示例 1:查找字符串中所有 “he “的实例。
输出:
正如你注意到的,在上面的例子中,’He’没有被考虑,因为’H’和’h’的情况不同。但是如果你想忽略这些情况,可以将参数ignore.case设为True,默认设置为False。
示例2:要在字符串中找到所有’he’的实例,而不考虑大小写。
输出:
- grepl() function: 它是一个逻辑函数,如果在向量中找到指定的模式,则返回True,如果没有找到,则返回false。
语法:
grepl(pattern, string, ignore.case=FALSE)
参数:
pattern: 一个正则表达式模式。
string:要搜索的字符向量。
ignore.case: 是否在搜索中忽略大小写。这里ignore.case是一个可选的参数,默认设置为FALSE。
示例 1:查找字符串中是否存在 “the “的实例。
输出:
示例 2: 查找字符串中是否有’he’的实例。
输出:
- regexpr() function: 它在字符串的每个元素中搜索一个模式的出现。例如,如果一个向量由’n’个字符串组成,所有’n’个字符串都会被搜索到该模式。如果找到该模式,将返回该模式的索引。如果没有找到,则返回-1。因此,返回的输出向量的大小等于输入的大小。
语法:
regexpr(pattern, string, ignore.case = FALSE)
参数:
pattern: 一个正则表达式模式。
string:要搜索的字符向量,其中每个元素都被单独搜索。
ignore.case:是否在搜索中忽略大小写。这里ignore.case是一个可选的参数,默认情况下被设置为FALSE。
示例 1:查找矢量中每个字符串中是否有 “he “的实例。
输出:
示例 2: 找出矢量的每个字符串中是否有以元音开头的单词实例。
输出:
示例 3: 要找出每个字符串是否属于矢量的’10+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”。
输出
例2: 用 “aa “替换所有出现的 “he”。
输出
查找和删除字符串
为了搜索和删除一个特定的字符串/图案,我们可以使用两个函数,即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: 删除矢量中第一次出现的元音字母
输出
例2: 去除矢量中出现的所有元音
输出