如何在python中单词获取数字

gra*_*aph 8 python

我有一个包含以下行一个巨大的文件DDD-1126N|refseq:NP_285726|uniprotkb:P00112DDD-1081N|uniprotkb:P12121,我想以后抢号uniprotkb.

这是我的代码:

x = 'uniprotkb:P'
f = open('m.txt')
for line in f:
  print line.find(x) 
  print line[36:31 + len(x)]
Run Code Online (Sandbox Code Playgroud)

问题line.find(x)在于10和26,我在26岁时获取完整的数字.我是编程的新手,所以我正在寻找一些东西来获取完整的数字.

x = 'uniprotkb:'
f = open('m.txt')
for line in f:
  if x in line:
    print the number after x
Run Code Online (Sandbox Code Playgroud)

inf*_*red 10

使用正则表达式:

import re
for line in open('m.txt'):
    match = re.search('uniprotkb:P(\d+)', line)
    if match:
        print match.group(1)
Run Code Online (Sandbox Code Playgroud)


Rob*_*bus 8

import re
regex = re.compile('uniprotkb:P([0-9]*)')
print regex.findall(string)
Run Code Online (Sandbox Code Playgroud)


cho*_*own 5

如果该模块是静态的并且始终与每行末尾的子字符串匹配(如),则该re模块在这里是完全不必要的: x"DDD-1126N|refseq:NP_285726|uniprotkb:P00112"

\n\n
x = \'uniprotkb:\'\nf = open(\'m.txt\')\nfor line in f:\n\xc2\xa0 if x in line:\n\xc2\xa0 \xc2\xa0 print line[line.find(x)+len(x):]\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

编辑: \n回答你的评论。如果它们由竖线字符 ( |) 分隔,那么您可以这样做:

\n\n
sep = "|"\nx = \'uniprotkb:\'\nf = open(\'m.txt\')\nfor line in f:\n\xc2\xa0 if x in line:\n\xc2\xa0 \xc2\xa0 matches = [l[l.find(x)+len(x):] for l in line.split(sep) if l[l.find(x)+len(x):]]\n    print matches\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果 m.txt 有以下行:

\n\n
DDD-1126N|uniprotkb:285726|uniprotkb:P00112\n
Run Code Online (Sandbox Code Playgroud)\n\n

那么上面会输出:

\n\n
[\'285726\', \'P00112\']\n
Run Code Online (Sandbox Code Playgroud)\n\n

替换sep = "|"为任何列分隔符。

\n