首页 > 解决方案 > 正则表达式:在包含数字的字符串之后提取一个数字

问题描述

假设我有一个字符串:

str <- "England has 90 cases(1 discharged, 5 died); Scotland has 5 cases(2 discharged, 1 died)"

我怎样才能掌握英格兰的出院病例数?

我试过了

sub("(?i).*England has [\\d] cases(.*?(\\d+).*", "\\1", str),

它正在返回原始字符串。非常感谢!

标签: rregex

解决方案


我们可以使用regmatches/gregexpr匹配一个或多个数字 ( \\d+) 后跟一个空格,“discharged”来提取放电次数

as.integer(regmatches(str, gregexpr("\\d+(?= discharged)", str, perl = TRUE))[[1]])
#[1] 1 2

如果仅特定于“England”,则以“England”开头,后跟字符 tat are not a (( [^(]+) and (,然后将数字 ( \\d+) 捕获为一个组,在替换中指定\\1捕获组的反向引用 ( )

sub("England[^(]+\\((\\d+).*", "\\1", str)
#[1] "1"

或者,如果我们通过 OP 的选项,(应该转义,因为它是捕获组的元字符(在 之后cases)。也\\d+可以放在方括号外面

sub("(?i)England has \\d+ cases\\((\\d+).*", "\\1", str)
#[1] "1"

推荐阅读