R语言【base】——grep,grepl,regexpr,gregexpr,regexec,gregexec,sub,gsub模式匹配和替换

Package base version 4.3.2


Parameters

grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE,
     fixed = FALSE, useBytes = FALSE, invert = FALSE)

grepl(pattern, x, ignore.case = FALSE, perl = FALSE,
      fixed = FALSE, useBytes = FALSE)

sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
    fixed = FALSE, useBytes = FALSE)

gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
     fixed = FALSE, useBytes = FALSE)

regexpr(pattern, text, ignore.case = FALSE, perl = FALSE,
        fixed = FALSE, useBytes = FALSE)

gregexpr(pattern, text, ignore.case = FALSE, perl = FALSE,
         fixed = FALSE, useBytes = FALSE)

regexec(pattern, text, ignore.case = FALSE, perl = FALSE,
        fixed = FALSE, useBytes = FALSE)

gregexec(pattern, text, ignore.case = FALSE, perl = FALSE,
        fixed = FALSE, useBytes = FALSE)

参数【pattern】:字符串,其中包含一个正则表达式(或 fixed = TRUE 时的字符串),需要在给定的字符向量中进行匹配。如果可能的话,由 as.character 强制转换为字符串。如果提供的字符向量长度为 2 或更长,则使用第一个元素并发出警告。除 regexprgrexprregexec 外,允许使用缺失值。

参数【x,text】:查找匹配的字符向量、 或可通过 as.character 强制转换为字符向量的对象。支持长向量。

参数【ignore.case】:如果为 FALSE,则模式匹配区分大小写;如果为 TRUE,则在匹配过程中忽略大小写。

参数【perl】:逻辑。是否应该使用与 Perl 兼容的 regexps

参数【value】:如果为 FALSE,则返回一个包含 grep 确定的匹配项(整数)索引的向量;如果为 TRUE,则返回一个包含匹配元素本身的向量。

参数【fixed】:逻辑。如果为 TRUE,则模式为字符串,按原样匹配。覆盖所有冲突参数。

参数【useBytes】:逻辑匹配。如果为 TRUE,匹配将逐个字节进行,而不是逐个字符进行。

参数【invert】:逻辑。如果为 TRUE,则返回不匹配元素的索引或值。

参数【replacement】:替换 subgsub 中的匹配模式。如果可能,可强制为字符。

  • 对于 fixed = FALSE,这可能包括模式的括号子表达式的转义字符 "\1" "\9"
  • 对于 perl = TRUE,它还可以包含 "\U""\L" 来将替换的其余部分转换为大写或小写,以及 "\E" 来结束大小写转换。
  • 如果提供的字符向量长度为 2 或更长,则使用第一个元素并发出警告。
  • 如果为 NA,则结果中与匹配结果相对应的所有元素都将设置为 NA。

Skills

grepgrepplregexprgregexprregexecgregexec 在字符向量的每个元素中搜索与参数【pattern】匹配的内容:它们在结果的格式和详细程度上有所不同

subgsub 分别对第一条匹配和所有匹配进行替换。

如果可能,本应是字符串或字符向量的参数会被强制为字符。

每种函数都有三种操作模式:

  1. fixed = TRUE:使用完全匹配。
  2. perl = TRUE:使用 Perl 风格的正则表达式。
  3. fixed = FALSEperl = FALSE:使用 POSIX 1003.2 扩展正则表达式(默认)。

这两个 *sub 函数的区别仅在于 sub 只替换模式的第一次匹配,而 gsub 则替换所有匹配。如果参数【replacement】包含未在参数【pattern】中定义的转义字符,结果将是未转义的(但转义符通常被认为是"")。

对于 regexprgrexprregexecgregexec,如果参数【pattern】NA 则报错,而在其他函数中参数【pattern】允许 NA,并匹配 NA

grepgrepl 都将参数【x】中的缺失值视为与非缺失参数【pattern】不匹配项。

useBytes = TRUE 的主要作用是避免在多字节本地环境中出现无效输入和虚假匹配的错误/警告,但对于 regexpr,它改变了输出的解释。如果发现任何输入被标记为 "bytes",就会强制转换。

在多字节语言中,忽略字母大小写的匹配对字节的意义不大,只有在 useBytes = TRUE 的情况下,才能对 ASCII 字符有效。

perl = TRUEregexpr gregexpr 允许 Python 风格的命名捕获,但不支持长向量输入。

对当前语言中的无效输入最多警告 5 次。

使用 perl = TRUE 对非 ASCII 字符进行忽略字母大小写的匹配,取决于 PCRE 库在编译时是否支持 "Unicode",PCRE2 默认支持 "Unicode"。


Value

grep(value = FALSE) 返回参数【x】中匹配(或不匹配,invert = TRUE)的索引向量。这将是一个整数向量,除非输入是一个长向量,那么将是一个双向量。

grep(value = TRUE) 返回一个字符向量,其中包含参数【x】的匹配元素(经过强制转换后,保留名称,但不保留其他属性)。

grepl 返回一个逻辑向量(参数【x】的每个元素是否匹配)。

subgsub 会返回一个长度和属性与参数【x】相同的字符向量(在可能强制转换为字符后)。

  • 未被替换的字符向量参数【x】元素将原封不动地返回(如果 useBytes = FALSE,则包括任何已声明的编码)。
  • 如果 useBytes = FALSE,非 ASCII 编码的替换结果通常会是带有标记的 UTF-8 编码(例如,如果有 UTF-8 输入,除非 fixed = TRUE,否则会是多字节本地编码)。这些字符串可以用 enc2native 重新编码。
  • 如果任何输入标记为 "bytes",则字符向量参数【x】中被替换的元素将标记为 "bytes" 返回,但未被替换元素的编码标志未指定(可能是原始编码或 "bytes")。
  • 如果没有任何输入被标记为 "bytes",但明确给出 useBytes = TRUE,那么即使在被替换的元素上,编码标志也是未指定的(可能是 "bytes" "unknown",可能在当前编码中无效)。
  • 不鼓励混合使用 "bytes" 和其他标记的编码,但如果仍有需要,可以使用 iconv 将结果重新编码,例如将无效字节适当替换为 UTF-8 编码。

regexpr 返回一个与文本长度相同的整数向量,表示第一个匹配项的起始位置;如果没有匹配项,则返回 -1;属性 "match.length" 是一个整数向量,表示匹配文本的长度(如果没有匹配项,则返回 -1)。

  • 匹配位置和长度是以字符为单位的,除非使用了 useBytes = TRUE,此时匹配位置和长度是以字节为单位的(仅 ASCII 码匹配时也是如此:无论哪种情况,都会在结果上设置值为 TRUE 的属性 useBytes)。
  • 如果使用命名捕捉,还有 "capture.start""capture.length" "capture.names" 属性。

gregexpr 返回一个与文本长度相同的列表,其中每个元素的形式都与 regexpr 的返回值相同,只是给出了每个(不相连的)匹配的起始位置。

regexec 返回一个与文本长度相同的列表,其中每个元素的值要么是 -1(如果没有匹配项),要么是一个整数序列,包含匹配项的起始位置以及与模式的括号子表达式相对应的所有子串,属性 "match.length" 是一个向量,给出匹配项的长度(如果没有匹配项,则返回 -1)。位置和长度以及属性的解释遵循 regexpr

gregexec 返回的结果与 regexec 相同,只是为了适应每个文本元素有多个匹配项的情况,每个匹配项的整数序列都被编入一个矩阵的列中,每个有匹配项的文本元素有一个矩阵。

如果由于资源限制导致匹配失败(尤其是 perl = TRUE 时),则视为不匹配,通常会发出警告。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALittleHigh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值