python中的正则表达式跳过前两行的字符

时间:2013-06-28 19:34:24

标签: python regex expression

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

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']

正则表达式正在跳过每个基因的前两个字符,我无法弄清楚原因。

1 个答案:

答案 0 :(得分:7)

你的问题在这里:

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

second parameter to a regex object's match() methodpos,表示匹配操作的起始位置。 re.IGNORECASE恰好是2

在编译时,您已经将正则表达式定义为不区分大小写,因此当然不需要再次执行此操作(因此无法执行此操作)。此外,您的正则表达式无论如何都不需要该选项,因为它不包含任何套接字符。

当我到达时,"[^\s]*"应为r"\S*"