如何用gsub与正则识别并移除连续管道符(保留特定场景管道符)
解决方案
首先构造测试数据框:
df <- structure(list(col1 = c(" | | | | | | | |", "| | | | | | | | | | | | | | |", "| | | | | | | | | | | | | | | ", "stop|", "stop| | ", "stop | go")), class = "data.frame", row.names = c(NA, -6L))
使用以下正则表达式替换,可以精准满足需求:
df$col1 <- gsub("(?:^\\s*\\|\\s*)+|(?:\\s*\\|\\s*)+$|(?:\\s*\\|\\s*){2,}", "", df$col1, perl = TRUE)
正则说明:
(?:^\\s*\\|\\s*)+:匹配字符串开头所有由「任意空格+|+任意空格」组成的连续序列,删除这类无意义的开头分隔符(?:\\s*\\|\\s*)+$:匹配字符串结尾所有由「任意空格+|+任意空格」组成的连续序列,删除行尾的无效分隔符(?:\\s*\\|\\s*){2,}:匹配两个及以上连续的「任意空格+|+任意空格」序列,删除这类连续的无意义分隔符
执行后的数据框结果:
> df$col1 [1] "" "" "" "stop" "stop" "stop | go"
内容的提问来源于stack exchange,提问作者hy9fesh
相关产品推荐
相关产品推荐

