4

以下の「str」の「uniprotkb:」と「(遺伝子名)」の間のすべての値を取得する方法:

str = 'uniprotkb:HIST1H3D(gene name)|uniprotkb:HIST1H3A(gene name)|uniprotkb:HIST1H3B(gene name)|uniprotkb:HIST1H3C(gene name)|uniprotkb:HIST1H3E(gene name)|uniprotkb:HIST1H3F(gene name)|uniprotkb:HIST1H3G(gene name)|uniprotkb:HIST1H3H(gene name)|uniprotkb:HIST1H3I(gene name)|uniprotkb:HIST1H3J(gene name)' 

結果は次のとおりです。

HIST1H3D
HIST1H3A
HIST1H3B
HIST1H3C
HIST1H3E
HIST1H3F
HIST1H3G
HIST1H3H
HIST1H3I
HIST1H3J 
4

3 に答える 3

8

re.findall()を使用すると、正規表現に一致する文字列のすべての部分を取得できます。

>>> import re
>>> sstr = 'uniprotkb:HIST1H3D(gene name)|uniprotkb:HIST1H3A(gene name)|uniprotkb:HIST1H3B(gene name)|uniprotkb:HIST1H3C(gene name)|uniprotkb:HIST1H3E(gene name)|uniprotkb:HIST1H3F(gene name)|uniprotkb:HIST1H3G(gene name)|uniprotkb:HIST1H3H(gene name)|uniprotkb:HIST1H3I(gene name)|uniprotkb:HIST1H3J(gene name)' 
>>> re.findall(r'uniprotkb:([^(]*)\(gene name\)', sstr)

['HIST1H3D', 'HIST1H3A', 'HIST1H3B', 'HIST1H3C', 'HIST1H3E', 'HIST1H3F', 'HIST1H3G', 'HIST1H3H', 'HIST1H3I', 'HIST1H3J']
于 2012-10-02T14:54:55.550 に答える
0

これがワンライナーです:

astr = 'uniprotkb:HIST1H3D(gene name)|uniprotkb:HIST1H3A(gene name)|uniprotkb:HIST1H3B(gene name)|uniprotkb:HIST1H3C(gene name)|uniprotkb:HIST1H3E(gene name)|uniprotkb:HIST1H3F(gene name)|uniprotkb:HIST1H3G(gene name)|uniprotkb:HIST1H3H(gene name)|uniprotkb:HIST1H3I(gene name)|uniprotkb:HIST1H3J(gene name)'
[pt.split('(')[0] for pt in astr.strip().split('uniprotkb:')][1:]

与える:

['HIST1H3D',
 'HIST1H3A',
 'HIST1H3B',
 'HIST1H3C',
 'HIST1H3E',
 'HIST1H3F',
 'HIST1H3G',
 'HIST1H3H',
 'HIST1H3I',
 'HIST1H3J']

ランタイムが重要な場合は、正規表現ソリューションはお勧めしません。

于 2012-10-02T14:58:45.393 に答える
-1

私は正規表現を気にしないでしょう:

s = 'uniprotkb:HIST1H3D(gene name)|uniprotkb:HIST1H3A(gene name)'  # etc

gene_names = []
for substring in s.split('|'):
    removed_first = substring.partition('uniprotkb:')[2]  # remove the first part of the substring
    removed_second = removed_first.partition('(gene name)')[0]  # remove the second part
    gene_names.append(removed_second)  # put it on the list

トリックを行う必要があります。あなたはそれをワンライナーにすることさえできます-上記は以下と同等です:

gene_names = [substring.partition('uniprotkb:')[2].partition('(gene name)')[0] for substring in s.split('|')]
于 2012-10-02T14:55:40.763 に答える