如何在python中获取单词后面的数字

2024-09-21 05:19:13 发布

您现在位置: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时,我获取完整的数字。我对编程还不太熟悉,所以我在找一些东西来抓住单词后面的完整数字。

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

Tags: 文件intxtfornpline数字open
3条回答

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

x = 'uniprotkb:'
f = open('m.txt')
for line in f:
  if x in line:
    print line[line.find(x)+len(x):]

编辑: 回答你的评论。如果它们由管道字符(|)分隔,则可以执行以下操作:

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

如果m.txt有以下行:

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

然后上述将输出:

['285726', 'P00112']

用列分隔符替换sep = "|"

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

使用正则表达式:

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

相关问题 更多 >

    热门问题