第一次出现图案正则表达式gsub R后,删除所有内容

时间:2019-03-14 18:30:46

标签: r regex

这可能非常简单,但我仍然找不到答案。我想删除字符串中第一个“ que”之前的所有内容:

我在做什么:

.*^que

我想要的是“ 1”和“ euBoqueirãoque”。当我尝试detail时,它没有任何效果。谢谢您的帮助。

3 个答案:

答案 0 :(得分:3)

要删除直到出现的所有图案(包括第一次出现的图案),请使用

sub(".*?que", "", v)
[1] " 1"                 " eu Boqueirao que "

如果使用后还需要删除任何0+空格

sub(".*?que\\s*", "", v, perl=TRUE)
## => [1] "1"                 "eu Boqueirao que "

请注意,perl=TRUE在这里很重要,因为.*?que\s* TRE regex会禁用当前级别的第一个非贪婪量词*?的贪婪,而\s*充当正则表达式末尾的非贪婪模式和非贪婪模式永远不会匹配任何字符串。

奖金:万一您想删除模式首次出现之前的所有文本,除了该模式 ,请包裹在捕捉括号时需要保留的部分,在替换模式中使用\1

sub(".*?(que)", "\\1", v)
## => [1] "que 1"                 "que eu Boqueirao que "

答案 1 :(得分:2)

按照Jet的回答,您还可以使用stringr::extract

v <- c("blabla que 1", "blabla que eu Boqueirão que ")
stringr::str_extract(v, '(?<=que ).+')

输出

[1] "1"                 "eu Boqueirão que "

要对Wiktor S的答案发表评论,您需要sub而不是gsub,因为sub替换了第一个实例,但是gsub找到了全部或全局替换

答案 2 :(得分:1)

您可以使用snapshotChanges

stringr::str_match

输出:

v <- c("blabla que 1", "blabla que eu Boqueirão que ")
stringr::str_match(v, 'que(.*)')[,2]