我有这样的字符串:“ X96HE6.10nMBI_1_2”,“ X96HE6.10nMBI_2_2”,“ X96HE6.10nMBI_3_2”,我想在下划线之间匹配数字1、2和3,但不使用下划线(下划线)。我能想到的最好的解决方案是str_match(sample_names, "_+[1-3]?")
,我非常感谢您的帮助。
最简单的方法是使用sub
和向后引用:
数据:
d <- c("X96HE6.10nMBI_1_2", "X96HE6.10nMBI_2_2", "X96HE6.10nMBI_3_2")
解决方案:
sub(".*_(\\d)_.*", "\\1", d)
[此处,(\\d)
为单个数字定义捕获组(如果有问题的数字可以超过一个数字,请使用\\d+
),该替换由\\1
替换中的后向引用sub
调用)参数
或者使用str_extract
和积极的视野:
library(stringr)
str_extract(d, "(?<=_)\\d(?=_)")
(?<=_)
是正向后方,可以掩饰为“如果在左侧看到_
...”
\\d
是要匹配的数字
[(?=_)
是正向的前瞻,可以用“如果您在右侧看到_
...”来掩饰]
结果:
[1] "1" "2" "3"
[您可以使用Look Arounds,我个人非常依赖于此类正则表达式的Stringing Cheatsheets,语法有点难以记住,这是rstudio page for Cheatsheets查找stringer-> LOOK AROUNDS
最后使用注释中的x
,使用read.table
进行阅读,然后选择第二个字段。不使用包或正则表达式。
不需要任何第三方模块: