使用 gsub 提取部分字符串

Extracting parts of character string with gsub

我对 R 很陌生,现在正在使用我和我的主管完成的脚本。 不幸的是,我无法将 gsub() 的一个实例重新用于我的样本名称。 以前的版本看起来像这样(整个 df 的前后变化):

"1: Anterior LN_60_026.fcs"   

并使用

拆开
cell.counts$EH_ID <- gsub("\d+: (Anterior|Posterior) LN_(\d{2})_\d{3}.fcs", "LM02\2", cell.counts$Sample)
cell.counts$Position <- gsub("\d+: (Anterior|Posterior) LN_(\d{2})_\d{3}.fcs", "\1", cell.counts$Sample)

现在我遇到了类似的问题,需要进行一些小的调整。因为我不知道 gsub() 语法是如何工作的,所以我坚持使用:

"1: mLN_681_030.fcs"     

mLN 和脾脏在整个 df 中变化,我尝试修改的代码不再起作用:

cells$Mouse_ID <- gsub("\d+: (mLN|spleen)(_\d{2})_\d{3}_\.fcs", "AA_0\2", cells$Sample)
cells$tissue <- gsub("\d+: (mLN|spleen)_(\d{3})_\d{3}.fcs", "\1", cells$Sample)

我应该补充一点,"tissue" 分离有效,样本编号提取无效。 如果有人能向我解释我做错了什么以及这段代码中的字符具体做了什么,我将不胜感激。 P.S.: 是的,我用过 ?gsub 但我发现 R 中的帮助文件对初学者很不友好,也不太了解。

您的鼠标 ID 行中的第二个捕获组正好是 2 位数字,并且您的文件名前有尾随下划线。

同样在第二个正则表达式中你没有转义 . 它仍然有效,因为未转义的 . 将匹配任何字符但应该是 \. 如下。

# > str <- "1: mLN_681_030.fcs"
# > gsub(str, pattern="\d+: (mLN|spleen)(_\d{3})_\d{3}\.fcs", replacement = "AA_0\2")
# [1] "AA_0_681"
# > gsub(str, pattern = "\d+: (mLN|spleen)_(\d{3})_\d{3}\.fcs", replacement = "\1")
# [1] "mLN"