使用regex预定义的类,R中有一个例外

时间:2018-11-02 11:15:44

标签: r regex strsplit

因此,我试图根据字符串中出现的所有标点符号和空格(因此带有+号)来拆分字符串,但“#”和“ /”除外,因为我不希望它拆分#不适用。我确实在这个问题上进行了很多搜索,但是无法找到解决方案。有什么建议吗?

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

我也曾尝试将以下内容存储到t中,但它也会给出错误消息

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

错误:“ t <-” [!“ \”

中意外输入

一种替代方法是替换#n / a,但我想知道如何做而不必这样做。

1 个答案:

答案 0 :(得分:1)

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

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

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

请参见regex demo

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

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

请注意,]必须紧接在[开头之后,表达式中的[不需要转义,-可以在末尾不转义, \应该用4个反斜杠定义。 $不必逃脱。