我觉得这很奇怪:
pattern <- "[[:punct:][:digit:][:space:]]+"
string <- "a . , > 1 b"
gsub(pattern, " ", string)
# [1] "a b"
library(stringr)
str_replace_all(string, pattern, " ")
# [1] "a > b"
str_replace_all(string, "[[:punct:][:digit:][:space:]>]+", " ")
# [1] "a b"
Run Code Online (Sandbox Code Playgroud)
这是预期的吗?
仍在努力,但?"stringi-search-charclass"说:
注意使用POSIX字符类,例如'[:punct:]'.ICU用户指南(见下文)指出,一般来说,它们没有明确定义,因此最终可能会出现与您预期不同的内容.
特别是,在类似POSIX的正则表达式引擎中,'[:punct:]'代表对应于'ispunct()'分类函数的字符类(在类UNIX系统上查看'man 3 ispunct').根据ISO/IEC 9899:1990(ISO C90),'ispunct()'函数测试任何打印字符,除了空格或'isalnum()'为真的字符.但是,在POSIX设置中,哪些字符属于哪个类的详细信息取决于当前区域设置.因此'[:punct:]'类不会导致可移植代码(同样,在类似POSIX的正则表达式引擎中).
因此'[:punct:]'的POSIX风格更像'ICU'中的'[\ p {P}\p {S}]'.你被警告了.
复制上面发布的问题,
string <- "a . , > 1 b"
mypunct <- "[[\\p{P}][\\p{S}]]"
stringr::str_remove_all(string, mypunct)
Run Code Online (Sandbox Code Playgroud)
我可以欣赏特定于语言环境的东西,但它仍然让我感到惊讶,[:punct:]甚至不能在C语言环境中工作......
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |