承认之前已经问过这些正则表达式问题,但我仍在努力寻找可行的解决方案(即使在咨询了 ChatGPT 之后)。
以以下示例为例:
text <- c("test1", "test2 | ", "test3 | test3 | test 3", "test4 | test4 | test 4 | test4")
我想删除从第n次(在我的例子中是第二次)出现“|”开始的所有文本。
所以输出应该是:
output <- c("test1", "test2 | ", "test3 | test3", "test4 | test4")
当最多有两个带有
str_remove(text, "( \\| [^\\|]+$)")
的“|”文本时,我得到了它,但这并不适用于该匹配模式出现两次以上的情况。
解决方案可能是提取感兴趣的字符串,而不是删除不需要的部分。为此,您可以使用按长度降序匹配三种感兴趣情况的正则表达式:
[:graph:]+ \\| [:graph:]+
、[:graph:]+ \\|
或 [:graph:]+
。
library(stringr)
str_extract(text, "^([:graph:]+ \\| [:graph:]+|[:graph:]+ \\||[:graph:]+)")
[1] "test1" "test2 |" "test3 | test3" "test4 | test4"