r - 正则表达式:在包含数字的字符串之后提取一个数字
问题描述
假设我有一个字符串:
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),
它正在返回原始字符串。非常感谢!
解决方案
我们可以使用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"
推荐阅读
- ios - 复选标记未显示在表格单元格中
- python - 安装 python httpclient 时遇到错误
- python-3.x - 如何使用 sqlalchemy 插入选择字段?
- javascript - 如何在我的 chrome 扩展程序和我的 Node 服务器之间启用跨域 AJAX 请求?
- excel - 根据范围内的唯一值在多个工作簿中拆分工作表
- c - 处理 C 中的数学错误
- php - php echo返回jQuery失败
- ruby-on-rails - 如何通过rails控制台上的模型获取通讯员ID
- php - 返回页面时显示已经存在的“财富”
- asp.net-core - 使用 SignalR 在 ASP .NET CORE 中自定义实现类似按钮