删除文本中第 n 次出现之后(包括第 n 次出现)的所有字符串

问题描述 投票:0回答:1

承认之前已经问过这些正则表达式问题,但我仍在努力寻找可行的解决方案(即使在咨询了 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, "( \\| [^\\|]+$)")
的“|”文本时,我得到了它,但这并不适用于该匹配模式出现两次以上的情况。

r regex stringr
1个回答
0
投票

解决方案可能是提取感兴趣的字符串,而不是删除不需要的部分。为此,您可以使用按长度降序匹配三种感兴趣情况的正则表达式:

[:graph:]+ \\| [:graph:]+
[:graph:]+ \\|
[:graph:]+

library(stringr)
str_extract(text, "^([:graph:]+ \\| [:graph:]+|[:graph:]+ \\||[:graph:]+)")
[1] "test1"         "test2 |"       "test3 | test3" "test4 | test4"
© www.soinside.com 2019 - 2024. All rights reserved.