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

正規表現はすべての遺伝子の最初の 2 文字をスキップしていますが、その理由がわかりません。

4

1 に答える 1

7

あなたの問題はここにあります:

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

正規表現オブジェクトのmatch()メソッドの2 番目のパラメーターはposです。これは、一致操作の開始位置を意味します。re.IGNORECASEたまたま2です。

正規表現をコンパイルするときに大文字と小文字を区別しないように既に定義しているため、もちろんそれを再度行う必要はありません(したがって、それを行う方法はありません)。さらに、大文字と小文字が区別された文字が含まれていないため、正規表現にはそのオプションは必要ありません。

私がそれをしている間、そうある"[^\s]*"べきですr"\S*"

于 2013-06-28T19:40:24.337 に答える