这可能非常简单,但我仍然找不到答案。我想删除字符串中第一个“ que”之前的所有内容:
我在做什么:
.*^que
我想要的是“ 1”和“ euBoqueirãoque”。当我尝试detail
时,它没有任何效果。谢谢您的帮助。
答案 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]