使用正则表达式预定义 class,但 R 中存在异常

using regex predefined class with an exception in R

所以我试图根据所有标点符号和 space 在字符串中出现的任何位置(因此是 + 符号)拆分我的字符串,除了“#”和“/”,因为我不知道不希望它分裂 #n/a 它所做的。我确实在这个问题上进行了很多搜索,但无法找到解决方案。有什么建议吗?

t<-"[[:punct:][:space:]]+" 
bh <- tolower(strsplit(as.character(a), t)[[1]])

我也试过将以下内容存储到 t 但它也给出错误

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

错误:"t<-"[!"\"

中的意外输入

一个替代方法是替换#n/a,但我想知道如何在不必这样做的情况下做到这一点。

您可以使用具有前瞻性的 PCRE 正则表达式来限制括号表达式模式:

t <- "(?:(?![#/])[[:punct:][:space:]])+"
bh <- tolower(strsplit(as.character(a), t, perl=TRUE)[[1]])

(?:(?![#/])[[:punct:][:space:]])+ 模式匹配 1 次或多次重复的任何非 #/ 字符的标点符号或空格。

参见regex demo

如果您想在括号表达式中拼出要匹配的符号,您可以修改其他模式,如

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

注意]必须紧跟在[之后,表达式里面的[不需要转义,-可以不转义放在最后,一个 \ 应该用 4 个反斜杠定义。 $不必转义。