Р: Включает ли [:punct:] +?

Глядя на R документацию по регулярным выражениям, [:punct:] включает в себя следующие символы -

Знаки препинания:

! " # $ % & ' ( ) * + , - . / : ; ‹ = > ? @ [ \ ] ^ _ ` { | } ~.

Но когда я пытаюсь использовать это в stringr::str_replace_all(), похоже, он не обнаруживает +.

str_vec = c("c++", "c--", "c+_")
str_replace_all(str_vec, pattern = "[[:punct:]]", replacement = "_")
[1] "c++" "c__" "c+_"
str_replace_all(str_vec, pattern = "[[:punct:]]{2,}", replacement = "_")
[1] "c++" "c_"  "c+_"

Это связано с настройками локали?

Sys.getlocale()
[1] "LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=en_US.UTF-8;LC_ADDRESS=en_US.UTF-8;LC_TELEPHONE=en_US.UTF-8;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=en_US.UTF-8"

или это что-то еще, чего мне здесь не хватает?


person steadyfish    schedule 05.05.2016    source источник
comment
Это не базовое регулярное выражение Rs, но оно как-то связано с регулярным выражением, которое использует stringr : см. gsub("[[:punct:]]", "_", str_vec).   -  person lmo    schedule 05.05.2016
comment
Возможно, этот шаблон регулярного выражения не является частью словаря stringr. См. help("stringi-search-regex") список шаблонов.   -  person lmo    schedule 05.05.2016
comment
Спасибо @lmo. Глядя на help("stringi-search-charclass"), я увидел, что они уже предупреждают о классе символов POSIX [:punct:]! ".. .. So a POSIX flavor of [:punct:] is more like [\p{P}\p{S}] in ICU. .. .. "   -  person steadyfish    schedule 05.05.2016