我有一个看起来像这样的文本文件
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']
正则表达式正在跳过每个基因的前两个字符,我无法弄清楚原因。
答案 0 :(得分:7)
你的问题在这里:
match=gene.match(line, re.IGNORECASE)
second parameter to a regex object's match()
method是pos
,表示匹配操作的起始位置。 re.IGNORECASE
恰好是2
。
在编译时,您已经将正则表达式定义为不区分大小写,因此当然不需要再次执行此操作(因此无法执行此操作)。此外,您的正则表达式无论如何都不需要该选项,因为它不包含任何套接字符。
当我到达时,"[^\s]*"
应为r"\S*"
。