r - 提取R中特定模式包围的字符串中的所有数字

标签 r regex

我想提取字符串中两侧有两个标记/模式的所有数字。然而,R 中的正则表达式是我的祸根。

我有这样的东西:

string  <- "<img src='images/stimuli/32.png' style='width:341.38790035587186px;height: 265px;'><img src='images/stimuli/36.png' style='width:341.38790035587186px;height: 265px;'>"
marker1 <- "images/stimuli/"
marker2 <- ".png"

想要这样的东西

gsub(paste0(".*", marker1, "*(.*?) *", marker2, ".*"), "\\1", string)

[1] "32" "36"

但是我得到了这个:

[1] "32"

PS 如果有人有一个很好的指南来理解正则表达式如何在这里工作,请告诉我。我很确定答案很简单,但我只是不明白正则表达式:(

最佳答案

您可以使用

string  <- "<img src='images/stimuli/32.png' style='width:341.38790035587186px;height: 265px;'><img src='images/stimuli/36.png' style='width:341.38790035587186px;height: 265px;'>"
regmatches(string, gregexpr("images/stimuli/\\K\\d+(?=\\.png)", string, perl=TRUE))[[1]]
# => [1] "32" "36"

注意:如果可以有任何东西,而不仅仅是数字,您可以将 \\d+ 替换为 .*?

请参阅R demo和一个regex demo .

regmatchesgregexpr 提取输入中找到的所有匹配项。

正则表达式匹配:

  • images/stimuli/ - 文字字符串
  • \K - 匹配重置运算符,丢弃迄今为止匹配的所有文本
  • \d+ - 1+ 位数字
  • (?=\.png) - .png 子字符串(. 是一个特殊字符,需要转义)。<

关于r - 提取R中特定模式包围的字符串中的所有数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62041661/

相关文章:

r - 从 lme 模型中提取置信区间

r - 无法在 RStudio 中安装 devtools -- 找不到依赖项 (xml2/rversions)

r - 构建函数以将自然中断 jenks 应用于我的 df 列时出错

r - GoogleVis 和 Shiny

java - 使用正则表达式提取两个标签之间的文本

javascript - 正则表达式验证纬度和经度的输入格式

r - 更新数据框列中值的子集

java - 使用匹配项来匹配整个单词

regex - 在 perl 样式的正则表达式中匹配字符串的其余部分

regex - 未转义的左大括号正则表达式错误