R编程中的字符串匹配
字符串匹配是任何语言的一个重要方面。它在查找、替换和删除字符串时很有用。为了理解 R 语言中的字符串匹配,我们首先必须了解 R 中可用的相关函数。为此,我们可以使用匹配字符串或正则表达式。正则表达式是包含特殊符号和字符的字符串,用于从给定数据中查找和提取所需信息。正则表达式基本上是包含字符和特殊符号的字符串。要了解有关正则表达式的更多信息。
字符串匹配操作
查找字符串
为了在字符串中搜索特定模式,我们可以使用许多函数。如果我们需要找到所需字符串/pattern 的位置,我们可以使用 grep() 方法。另一方面,如果我们只需要知道模式是否存在,我们可以使用逻辑函数grepl()
根据结果返回 True 或 False。让我们更多地了解这些方法。
- grep()函数:它返回在向量中找到模式的索引。如果该模式多次出现,则返回出现的索引列表。这非常有用,因为它不仅告诉我们模式的出现,还告诉我们它在向量中的位置。
Syntax:
grep(pattern, string, ignore.case=FALSE)Parameters:
pattern: A regular expressions pattern.
string: The character vector to be searched.
ignore.case: Whether to ignore case in the search. Here ignore.case is an optional parameter as is set to FALSE by default.示例 1:在字符串中查找 'he' 的所有实例。
str <- c("Hello", "hello", "hi", "hey") grep('he', str)
输出:
[1] 2 4
正如您在上面的示例中注意到的那样,由于“H”和“h”的情况不同,没有考虑“He”。但是,如果希望忽略这些情况,则将参数ignore.case设置为 True,默认情况下设置为 False。
示例 2:查找字符串中的所有 'he' 实例,不考虑大小写
str <- c("Hello", "hello", "hi", "hey") grep('he', str, ignore.case ="True")
输出:
[1] 1 2 4
- grepl()函数:它是一个逻辑函数,如果在向量中找到指定的模式,则返回值 True,如果未找到,则返回 false。
Syntax:
grepl(pattern, string, ignore.case=FALSE)Parameters:
pattern: A regular expressions pattern.
string: The character vector to be searched.
ignore.case: Whether to ignore case in the search. Here ignore.case is an optional parameter as is set to FALSE by default.示例 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()函数:它在字符串的每个元素中搜索模式的出现。例如,如果一个向量由“n”个字符串组成,则搜索所有“n”个字符串以查找该模式。如果找到该模式,则返回该模式的索引。如果未找到,则返回 -1。因此,返回的输出向量的大小等于输入的大小。
Syntax:
regexpr(pattern, string, ignore.case = FALSE)Parameters:
pattern: A regular expression pattern.
string: The character vector to be searched, where each element is searched separately.
ignore.case: Whether to ignore case in the search. Here ignore.case is an optional parameter as is set to FALSE by default.示例 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()
替换所有出现的要替换的字符串并返回修改后的字符串。
Syntax:
sub(pattern, replaced_string, string)
gsub(pattern, replaced_string, string)
Parameters:
pattern: A regular expressions pattern.
string: The vector to be searched for instance(s) of the pattern to be replaced.
ignore.case: Whether to ignore case in the search. Here ignore.case is an optional parameter as is set to FALSE by default.
示例 1:将第一次出现的 'he' 替换为 'aa'
str = "heutabhe"
sub('he', 'aa', str)
输出:
aautabhe
示例 2:将所有出现的 'he' 替换为 'aa'
str = "heutabhe"
gsub('he', 'aa', str)
输出:
[1] "aautabaa"
查找和删除字符串
为了搜索和删除特定的字符串/模式,我们可以使用两个函数,即str_remove()
和str_remove_all()
。 str_remove()
删除唯一第一次出现的要删除的字符串/pattern 并返回修改后的字符串。另一方面, str_remove_all()
删除要删除的字符串的所有出现并返回修改后的字符串。
Syntax:
str_remove(string, pattern, ignore.case=False)
Parameters:
pattern: A regular expressions pattern.
string: The character vector to be searched for instance(s) of the pattern to be removed.
ignore.case: Whether to ignore case in the search. Here ignore.case is an optional parameter as is set to FALSE by default.
示例 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"