我想提取字符串中两侧有两个标记/模式的所有数字。然而,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 .
regmatches
与 gregexpr
提取输入中找到的所有匹配项。
正则表达式匹配:
images/stimuli/
- 文字字符串\K
- 匹配重置运算符,丢弃迄今为止匹配的所有文本\d+
- 1+ 位数字(?=\.png)
-.png
子字符串(.
是一个特殊字符,需要转义)。<
关于r - 提取R中特定模式包围的字符串中的所有数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62041661/