在R中的特定字符串后检索数字

时间:2015-02-28 16:49:46

标签: regex r

我有一堆字符串,其中包含“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)))

我对正则表达式很新,所以我确信有更好的方法。有什么想法吗?

2 个答案:

答案 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+).*

Regular expression visualization

Debuggex Demo

2)这也有效,涉及更简单的正则表达式并同时将其转换为数字:

library(gsubfn)
strapply("inflow100_radius6_distance12", "radius(\\d+)", as.numeric, simplify = TRUE)
## [1] 6

以下是正则表达式的可视化:

radius(\d+)

Regular expression visualization

Debuggex Demo