Глядя на 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"
или это что-то еще, чего мне здесь не хватает?
stringr
: см.gsub("[[:punct:]]", "_", str_vec)
. - person lmo   schedule 05.05.2016stringr
. См.help("stringi-search-regex")
список шаблонов. - person lmo   schedule 05.05.2016help("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