我试图将一个文件中的文本字符串(基因名称)与另一个文件的列中的文本字符串进行匹配,以便在第二个文件中创建子集。
为简单起见,第一个看起来或多或少是这样的:
hits = ["IL1", "NRC31", "AR", etc.]
然而,第二个df中感兴趣的列看起来像这样:
68 NFKBIL1;NFKBIL1;ATP6V1G2;NFKBIL1;NFKBIL1;NFKBI
236 BARHL2
272 ARPC2;ARPC2
324 MARCH5
...
11302 NFKBIL1;NFKBIL1;ATP6V1G2;NFKBIL1;NFKBIL1;NFKBI
426033 ABC1;IL1;XYZ2
...
425700 IL17D
426295 RAB3IL1
426474 IL15RA;IL15RA
我想出了:
df2[df2.UCSC_RefGene_Name.str.contains('|'.join(hits), na=False)]
但是我需要匹配基因IL1
,如果它落在弦的中间(例如上面的426033)但不是相似的基因(例如上面的第426295行)。
如何使用正则表达式来说:
" 匹配hits
中的任何字符串,当他们有';'或者'空白'在基因名称的开头或结尾处,但是当它们在任一侧有其他字母或数字时(表示具有相似名称的不同基因)?
我还需要在数据帧2中排除任何带NA的行。
是的,我知道有正则表达式的语法文档,但是这里有太多可移动的部分让我理解它们。