regex - 使用 gsub 从开始到第一次出现字符抓取

标签 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

最佳答案

只需添加一个字符,输入 ?在第一个量词之后使其“非贪婪”:

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/

相关文章:

r - 按组统计总样本和阳性样本

read.table 创建的行太少,但 readLines 的编号正确

R plot data.frame 以获得更有效的数据概览

r - 将午夜条目插入日志

python - 正则表达式,选择最接近的匹配项

java - 如何使用 Java Html 类删除包含内容的特定 html 类

r - 如何在 geom_col 图中仅标记模态峰值

python - 如何正则表达式直到最后一次出现?

c# - 从给定文本中查找匹配的第一个单词 - 正则表达式

javascript - Ruby 1.9 和 Javascript 正则表达式之间的区别