如何用正则表达式修改R向量字符串:将第4个下划线替换为_PE
优雅的正则替换实现方式
你可以使用R的sub()函数结合精准的正则表达式完成需求,核心思路是定位到第4个下划线的位置,通过分组匹配保留前后内容并插入指定字符串,代码简洁且可读性强:
# 定义原始向量 file_vec <- c("b040_p001_e001_DMSO_01.raw", "b040_p001_e001_DMSO_02.raw", "b040_p001_e001_DMSO_03.raw", "b040_p001_e001_DMSO_04.raw", "b040_p001_e001_DMSO_05.raw", "b040_p001_e001_DOX_01.raw", "b040_p001_e001_DOX_02.raw", "b040_p001_e001_DOX_03.raw", "b040_p001_e001_DOX_04.raw", "b040_p001_e001_DOX_05.raw", "b040_p001_e001_IAA_01.raw", "b040_p001_e001_IAA_02.raw", "b040_p001_e001_IAA_03.raw", "b040_p001_e001_IAA_04.raw", "b040_p001_e001_IAA_05.raw", "b040_p001_e001_MK1775_01.raw", "b040_p001_e001_MK1775_02.raw", "b040_p001_e001_MK1775_03.raw", "b040_p001_e001_MK1775_04.raw", "b040_p001_e001_MK1775_05.raw", "b040_p001_e001_pool_01.raw", "b040_p001_e001_pool_02.raw", "b040_p001_e001_pool_03.raw", "b040_p001_e001_pool_04.raw") # 执行替换 modified_vec <- sub("^(.*?_.*?_.*?_.*?)_(.*)$", "\\1_PE\\2", file_vec)
正则表达式说明
^:匹配字符串起始位置(.*?_.*?_.*?_.*?):第一个捕获分组,匹配前3个下划线及之前的所有内容,?启用非贪婪模式,确保只匹配到第4个下划线的前一个字符_:精准匹配第4个下划线(.*)$:第二个捕获分组,匹配第4个下划线之后的所有内容直到字符串结尾\\1_PE\\2:替换规则,保留第一个分组内容,插入_PE后拼接第二个分组内容
执行后,modified_vec中的元素会完全符合需求,例如b040_p001_e001_DMSO_01.raw会被替换为b040_p001_e001_DMSO_PE01.raw。
内容的提问来源于stack exchange,提问作者Pavel Shliaha
相关产品推荐
相关产品推荐

