如何使用gsub正则表达式提取列表元素名称指定内容?
解决方法
你的问题出在正则表达式里的[down_]——这是字符集,只会匹配d、o、w、n、_中的单个字符,而不是完整的down_前缀,导致捕获逻辑完全偏离预期。
以下是两种能实现需求的gsub写法:
写法一:精准捕获目标段
gsub("^down_([^_]+)_.*", "\\1", "down_PK56c-t_S5_L001.clones_IGH")
^down_:严格匹配字符串开头的down_前缀([^_]+):捕获所有不包含下划线的字符(正好对应你要的PK56c-t)_.*:匹配PK56c-t之后的所有内容- 替换为捕获组
\\1,即提取到的目标字符串
写法二:非贪婪匹配实现
gsub("down_(.*?)_.*", "\\1", "down_PK56c-t_S5_L001.clones_IGH")
.*?是非贪婪匹配模式,会在遇到第一个_时停止捕获,刚好拿到down_之后的PK56c-t
两种写法执行后都会返回PK56c-t,直接替换列表X的元素名即可:
X <- gsub("^down_([^_]+)_.*", "\\1", X)
内容的提问来源于stack exchange,提问作者Ahmed Hassan
相关产品推荐
相关产品推荐

