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

JAQ*_*ent 3 regex r

我想提取字符串中两侧有两个标记/模式的所有数字。然而,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"
Run Code Online (Sandbox Code Playgroud)

想要这样的东西

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

[1] "32" "36"
Run Code Online (Sandbox Code Playgroud)

不过我得到这个:

[1] "32"
Run Code Online (Sandbox Code Playgroud)

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

Wik*_*żew 5

您可以使用

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"
Run Code Online (Sandbox Code Playgroud)

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

请参阅R 演示正则表达式演示

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

正则表达式匹配:

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