←
PDF 246 / 520 a1 == a2 #> [1] FALSE
→
English · PDF 246
Original PDF page 246
中文 · PDF 246

a1 == a2 #> [1] FALSE

它们的渲染结果相同,但由于定义方式不同,fixed() 找不到匹配。相反,你可以使用接下来定义的 coll(),它遵循人类的字符比较规则:

str_detect(a1, fixed(a2)) #> [1] FALSE str_detect(a1, coll(a2)) #> [1] TRUE

  • coll() 使用标准的排序(collation)规则来比较字符串。这对于进行不区分大小写的匹配很有用。注意 coll() 接受一个 locale 参数,用于控制比较字符时使用哪套规则。遗憾的是,世界上不同地区使用不同的规则!

# 这意味着在进行不区分大小写的匹配时,# 你还需要注意这种差异:

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"

fixed() 和 regex() 都有 ignore_case 参数,但它们不允许你选择区域设置(locale):它们总是使用默认的区域设置。你可以用下面的代码查看它是什么(稍后会详细介绍 stringi):

stringi::stri_locale_info()

#> $Language

#> [1] "en"

#>

#> $Country

#> [1] "US"

#>

#> $Variant

#> [1] ""

#>

#> $Name

#> [1] "en_US"