R中的正则表达式,匹配字符串

问题描述 投票:0回答:4

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

r regex string
4个回答
2
投票

最简单的方法是使用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"
    

1
投票

[您可以使用Look Arounds,我个人非常依赖于此类正则表达式的Stringing Cheatsheets,语法有点难以记住,这是rstudio page for Cheatsheets查找stringer-> LOOK AROUNDS


1
投票

最后使用注释中的x,使用read.table进行阅读,然后选择第二个字段。不使用包或正则表达式。


1
投票

不需要任何第三方模块:

© www.soinside.com 2019 - 2024. All rights reserved.