删除最后一个空格前的所有内容

时间:2018-05-14 18:55:03

标签: r gsub stringr

我有一个以下字符串。我试图在最后一个空格之前删除所有字符串,但似乎我无法实现它。

我试着关注这篇文章

Use gsub remove all string before first white space in R

$('#nav-bar-util').on('click', '.util-box', function() {
    $this = $(`${$(this).data('link')}`);

    if (!$this.hasClass('is-active')) {
        $this.removeClass('is-close')
        $this.addClass('is-active')
    }
    else {
        $this.removeClass('is-active')
        $this.addClass('is-close')
    }
});

我想要的是在删除最后一个空格之前的所有内容后,只留下str <- c("Veni vidi vici") gsub("\\s*","\\1",str) "Venividivici" 个字符串。

1 个答案:

答案 0 :(得分:4)

您的gsub("\\s*","\\1",str)代码会替换每个出现的0个或更多空格,并引用捕获组#1值(由于您未在模式中指定任何捕获组,因此为空字符串)。

您希望匹配最后一个空格:

sub(".*\\s", "", str)

如果你不希望得到一个空白的结果,以防你的字符串有尾随空格,首先修剪字符串:

sub(".*\\s", "", trimws(str))

或者,使用一个方便的stri_extract_last_regex from stringi package和一个简单的\S+模式(匹配一个或多个非空白字符):

library(stringi)
stri_extract_last_regex(str, "\\S+")
# => [1] "vici"

请注意,.*尽可能多地匹配任何0+字符(因为*是一个贪婪的量词,而TRE模式中的.匹配包括换行符的任何字符),以及首先抓住整个字符串。然后,回溯开始,因为正则表达式引擎需要将空白与\s匹配。从字符串末尾开始按字符生成字符,正则表达式引擎在最后一个空格中偶然发送并调用它返回之后删除的匹配。

在线查看R demoregex demo

str <- c("Veni vidi vici")
gsub(".*\\s", "", str)
## => [1] "vici"

此外,您可能希望了解regex debugger

中的回溯方式

enter image description here

那些红色箭头表示回溯步骤。

相关问题