因此,我试图根据字符串中出现的所有标点符号和空格(因此带有+号)来拆分字符串,但“#”和“ /”除外,因为我不希望它拆分#不适用。我确实在这个问题上进行了很多搜索,但是无法找到解决方案。有什么建议吗?
t<-"[[:punct:][:space:]]+"
bh <- tolower(strsplit(as.character(a), t)[[1]])
我也曾尝试将以下内容存储到t中,但它也会给出错误消息
t<-"[!"\$%&'()*+,\-.:;<=>?@\[\\\]^_`{|}~\\ ]+"
错误:“ t <-” [!“ \”
中意外输入一种替代方法是替换#n / a,但我想知道如何做而不必这样做。
答案 0 :(得分:1)
您可以使用带前瞻性的PCRE正则表达式来限制方括号表达模式:
t <- "(?:(?![#/])[[:punct:][:space:]])+"
bh <- tolower(strsplit(as.character(a), t, perl=TRUE)[[1]])
(?:(?![#/])[[:punct:][:space:]])+
模式匹配非#
和/
字符的任何标点或空格的1个或多个重复。
请参见regex demo。
如果您想在方括号表达式中拼出要匹配的符号,则可以修复其他模式,例如
t <- "[][!\"$%&'()*+,.:;<=>?@\\\\^_`{|}~ -]+"
请注意,]
必须紧接在[
开头之后,表达式中的[
不需要转义,-
可以在末尾不转义, \
应该用4个反斜杠定义。 $
不必逃脱。