如何在python中单词获取数字

时间:2011-09-25 21:19:32

标签: 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)]

line.find(x)中的问题是10和26,当它是26时我抓住完整的数字。我是编程的新手,所以我正在寻找一些东西来获取完整的数字。< / p>

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

4 个答案:

答案 0 :(得分:8)

使用正则表达式:

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

答案 1 :(得分:6)

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

答案 2 :(得分:3)

如果 re是静态的并且始终匹配每行末尾的子字符串(例如x),那么{strong} {<1}}模块是非常不必要的。< / p>

"DDD-1126N|refseq:NP_285726|uniprotkb:P00112"

修改 回答你的评论。如果它们用竖线字符(x = 'uniprotkb:' f = open('m.txt') for line in f:   if x in line:     print line[line.find(x)+len(x):] )分隔,那么你可以这样做:

|

如果m.txt包含以下行:

sep = "|"
x = 'uniprotkb:'
f = open('m.txt')
for line in f:
  if x in line:
    matches = [l[l.find(x)+len(x):] for l in line.split(sep) if l[l.find(x)+len(x):]]
    print matches

然后上面会输出:

DDD-1126N|uniprotkb:285726|uniprotkb:P00112

['285726', 'P00112'] 替换为列分隔符。

答案 3 :(得分:0)

嗯,首先我建议您使用csv module来读取TSV文件。

但通常,您可以使用正则表达式:

import re
regex = re.compile(r"(?<=\buniprotkb:)\w+")
for line in f:
    match = regex.search(line)
    if match: 
        print match.group()

正则表达式匹配一串字母数字字符(如果它前面有uniprotkb: