我有以下正则表达式,我想抓取从句子开头到第一个 ##
的所有内容。 .我可以用 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
最佳答案
只需添加一个字符,输入 ?
在第一个量词之后使其“非贪婪”:
gsub("(.*?)(##.*)", "\\1", x)
# [1] "gfd gdr tsvfvetrv erv tevgergre "
这是相关文档,来自
?regex
By default repetition is greedy, so the maximal possible number of repeats is used. This can be changed to 'minimal' by appending '?' to the quantifier.
关于regex - 使用 gsub 从开始到第一次出现字符抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13608988/