字符串匹配的fixed()和coll()有什么区别?

时间:2019-04-15 15:46:21

标签: r stringr

stringr软件包中的几乎所有帮助文件都包含此行

  

使用fixed()匹配固定字符串(即仅比较字节)。   这是快速的,但是是近似的。通常,为了匹配人类文字,   您需要coll()遵守字符匹配规则   指定的语言环境。

基本的R包不包含coll()的选项,它们仅包含fixed()的选项。但是基本软件包也有useBytes,该函数在函数中设置为FALSE,例如grepl

fixed()与fixed = TRUE, useBytes = TRUE是同一事物,而coll()与fixed = TRUE, useBytes = FALSE是同一事物吗?我是Stringr的新手,我正在尝试寻找等效的东西。

1 个答案:

答案 0 :(得分:1)

trainable用于“归类搜索”。这是coll()

中的确切示例

vignette("stringr")使用人工语言归类规则查找与x的匹配项,如果您要进行不区分大小写的匹配,则这一点尤其重要。排序规则在世界各地都不同,因此您还需要提供一个语言环境参数。

coll(x)

i <- c("I", "İ", "i", "ı") i #> [1] "I" "İ" "i" "ı" str_subset(i, coll("i", ignore_case = TRUE)) #> [1] "I" "i" str_subset(i, coll("i", ignore_case = TRUE, locale = "tr")) #> [1] "İ" "i" 的缺点是速度。因为识别哪些字符相同的规则很复杂,所以与coll()coll()相比,regex()相对较慢。请注意,当fixed()fixed()都具有regex()时,它们执行的比较要比ignore_case arguments

简单得多

因此,coll()基本上使用给定语言环境中的信息来了解什么字符基本上是相同的,即使它们在技术上是不同的字符,也允许它们彼此匹配。