R删除第二个下划线后的字符串

R remove string after second underscore

这是一个非常基本的问题,但我找不到明确的答案...如何删除第二个下划线后的所有内容。谢谢!

Please_remove_this_part

期望的输出:

Please_remove

我会将问题描述为提取第二个下划线之前的所有内容:

x = "Please_remove_this_part"
stringr::str_extract(x, "[^_]*_[^_]*")
# [1] "Please_remove"

解释:[^_] 匹配除下划线以外的任何内容,因此 [^_]*_[^_]* 匹配任何非下划线的内容,一个下划线,然后是任何非下划线的内容。

x <- "Please_remove_this_part"
sub("([A-Za-z]+_[A-Za-z]+).*", "\1", x)
[1] "Please_remove"

sub 解决方案将第二个下划线之前的所有内容定义为捕获组,并通过替换参数中的反向引用 \1 调用它。