使用gsub抓住从开始到第一次出现的字符

Tyl*_*ker 9 regex r

我有以下正则表达式,我想抓住从句子开头到第一个句子的所有内容##.我可以使用strsplit我演示来完成这项任务,但我更喜欢一个gsub解决方案.如果gusub不是正确的工具(我认为是),我更喜欢基础解决方案,因为我想学习基础正则表达式工具.

x <- "gfd gdr tsvfvetrv erv tevgergre ## vev fe ## vgrrgf"

strsplit(x, "##")[[c(1, 1)]]  #works

gsub("(.*)(##.*)", "\\1", x)  #I want to work
Run Code Online (Sandbox Code Playgroud)

Jos*_*ien 14

只需添加一个字符,?在第一个量词之后加上"非贪婪":

gsub("(.*?)(##.*)", "\\1", x) 
# [1] "gfd gdr tsvfvetrv erv tevgergre "
Run Code Online (Sandbox Code Playgroud)

这是相关的文档,来自 ?regex

默认情况下,重复是贪婪的,因此使用最大可能的重复次数.可以通过附加'?'将其更改为'minimal' 到量词.