我有一堆字符串,其中包含“radius”字样,后跟一位或两位数字。它们还包含许多其他字母,数字和下划线。例如,一个是“inflow100_radius6_distance12”。我想要一个正则表达式,只返回“半径”后的一位或两位数字。如果R识别为\ K,那么我只想使用它:
radius\K[0-9]{1,2}
完成。但是R不允许\ K,所以我最终选择了这个(选择半径和以下数字,然后切断“半径”):
result <- regmatches(input_string, gregexpr("radius[0-9]{1,2}", input_string))
result <- unlist(substr(result, 7, 8)))
我对正则表达式很新,所以我确信有更好的方法。有什么想法吗?
答案 0 :(得分:7)
\K
被认可。您可以通过启用perl = TRUE
参数来解决问题。
result <- regmatches(x, gregexpr('radius\\K\\d+', x, perl=T))
答案 1 :(得分:4)
1)将整个字符串替换为radius
后的数字:
sub(".*radius(\\d+).*", "\\1", "inflow100_radius6_distance12")
## [1] "6"
正则表达式可以如下显示:
.*radius(\d+).*
2)这也有效,涉及更简单的正则表达式并同时将其转换为数字:
library(gsubfn)
strapply("inflow100_radius6_distance12", "radius(\\d+)", as.numeric, simplify = TRUE)
## [1] 6
以下是正则表达式的可视化:
radius(\d+)