如何移除文本中第n次指定分隔符及之后的所有内容?
解决方法:移除第二次及以后的" | "及其后续内容
使用stringr包的str_remove函数,配合针对性的正则表达式即可满足需求:
library(stringr) text <- c("test1", "test2 | ", "test3 | test3 | test 3", "test4 | test4 | test 4 | test4") output <- str_remove(text, "(?<=.* \\| ) \\| .*")
正则表达式说明
(?<=.* \\| ):正向回溯断言,确保目标字符串中至少包含一个" | ",避免对无分隔符或仅单个分隔符的字符串误操作\\| .*:匹配第二次出现的" | "及其之后的所有内容,将这部分直接移除
运行后得到的结果完全符合预期:
> output [1] "test1" "test2 | " "test3 | test3" "test4 | test4"
适配其他N值的扩展
如果需要保留前N个由" | "分隔的元素(移除第N次及以后的分隔符和内容),只需调整正则中的断言匹配次数。例如要保留前3个元素(N=3),正则改为:
str_remove(text, "(?<=^(?:[^|]* \\| ){2}) \\| .*")
这里(?:[^|]* \\| ){2}表示匹配2次"任意非|字符 + | ",确保前面已有2个分隔符,随后移除第三个及以后的内容。
内容的提问来源于stack exchange,提问作者deschen
相关产品推荐
相关产品推荐

