我有一个如下所示的 csv 文件:
ID, term, functional category
GO:0008166,viral replication,P,
GO:0008167,sigma virus replication,P,
GO:0008168,GO:0004480,methyltransferase activity,F,
GO:0008169,C-methyltransferase activity,F,
我只需要使用notepad++
将 ID 移动到它们自己的行,并将同一行中的内容复制到底部。因此,理想情况下,最终输出应如下所示:
ID, term, functional category
GO:0008166,viral replication,P,
GO:0008167,sigma virus replication,P,
GO:0008168,,methyltransferase activity,F,
GO:0004480,methyltransferase activity,F,
GO:0008169,C-methyltransferase activity,F,
我尝试使用替换功能,使用以下方法查找彼此相邻的 ID 实例:(\w+:\d+),(\w+:\d+),(.*),[A-Z]
并用 替换$1,$3,$4\r$2,$3,$4
。
但是,每次我尝试“找到”这些实例时,notepad++
它都会突出显示整个列表,并且命令将不起作用。
我对此不太有经验,所以如果有人能帮助我,我将不胜感激!谢谢!
原始文件:http://www.geneontology.org/doc/GO.terms_alt_ids
我删除了标题,并通过将所有制表符替换为逗号,将其转换为 csv。
答案1
在 CSV 中查找/替换重复的 ID
我使用的不是完全优化但功能齐全的正则表达式是:
(GO:[\d]+),(GO:[\d]+)(.*)
替换为:
$1$3\n$2$3
给出输出:
ID, term, functional category
GO:0008166,viral replication,P,
GO:0008167,sigma virus replication,P,
GO:0008168,methyltransferase activity,F,
GO:0004480,methyltransferase activity,F,
GO:0008169,C-methyltransferase activity,F,
请注意没有在您想要的输出中重复逗号,因为我认为这可能是副作用,而不是期望的。
如果需要重复的逗号,请使用:
$1,$3\n$2$3
作为替代。
解释
(GO:[\d]+)
- 第一个捕获组,匹配文字“GO:”后跟一个或多个数字($1
)
,
- 匹配文字逗号(用于检测重复的 ID/忽略非重复的 ID)
(GO:[\d]+)
- 第二个捕获组,与第一个相同!( $2
)
(.*)
- 第三个捕获组,匹配 0 个或更多“任何内容” - 此处为“该行剩余部分”的简写 ( $3
)
$1$3\n$2$3
- 打印 id 1
,然后打印剩余行;然后换行;打印 id 2
,然后打印剩余行
警告
请注意,要使上述正则表达式起作用,您必须. matches newline
禁用搜索选项。否则,第三个捕获组将匹配过多。