首页 > 解决方案 > R中的正则表达式,匹配字符串

问题描述

我有这样的字符串:“X96HE6.10nMBI_1_2”、“X96HE6.10nMBI_2_2”、“X96HE6.10nMBI_3_2”,我只想匹配下划线之间的数字 1、2 和 3,但没有它们(下划线)。我能想出的最佳解决方案是str_match(sample_names, "_+[1-3]?")我非常感谢您的帮助。

标签: rregexstring

解决方案


最简单的方法是使用sub和反向引用:

数据:

d <- c("X96HE6.10nMBI_1_2", "X96HE6.10nMBI_2_2", "X96HE6.10nMBI_3_2")

解决方案:

sub(".*_(\\d)_.*", "\\1", d)

在这里,(\\d)为单个数字定义捕获组(如果有问题的数字可以多于一位,请使用\\d+),由s 替换参数\\1中的反向引用“调用”sub

或者使用str_extract正面环视:

library(stringr)
str_extract(d, "(?<=_)\\d(?=_)")

(?<=_)是积极的向后看,可以表述为“如果你_在左边看到......”

\\d是要匹配的数字

(?=_)是积极的前瞻,它可以被修饰为“如果你_在右边看到......”

结果:

[1] "1" "2" "3"

推荐阅读