3

我有一个看起来像这样的文本文件

Name     #Variants  #Cases  #Controls

CNGA3   5   5   0
GPR125  4   3   0
IGHMBP2 4   4   0
STK11IP 4   4   0
ACAD9   3   3   0
ANKRD17 3   3   0

我想解析这个文件并将所有基因名称(name列)返回到列表 -list_of_genes或类似的东西。

我有以下代码

gene_list = []
for i in range (6, 7):
    run_file = open('run_{}_results.txt'.format(i))
    gene = re.compile('[^\s]*', re.I)
    for line in run_file:
        match=gene.match(line, re.IGNORECASE)
        if match:
            matched_gene = match.group()
            gene_list.append(matched_gene)

当我运行该代码时,我得到的结果是

['GA3', 'R125', 'HMBP2', 'K11IP', 'AD9', 'KRD17']

正则表达式跳过了每个基因的前两个字符,我不知道为什么。

4

1 回答 1

7

你的问题在这里:

match=gene.match(line, re.IGNORECASE)

正则表达式对象match()方法的第二个参数是pos,表示匹配操作的起始位置。re.IGNORECASE恰好是2

您已经将正则表达式定义为在编译时不区分大小写,所以当然没有必要再次这样做(因此没有办法这样做)。此外,您的正则表达式无论如何都不需要该选项,因为它不包含任何大小写字符。

当我在它的时候,"[^\s]*"应该是r"\S*"

于 2013-06-28T19:40:24.337 回答