【问题标题】:How to grab number after word in python如何在python中获取单词后的数字
【发布时间】:2011-11-24 19:25:37
【问题描述】:

我有一个巨大的文件,包含以下几行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

【问题讨论】:

  • 您仍然没有接受大部分问题的答案。你意识到你每接受一个就获得+2声望?如果至少有一个答案有帮助,您应该通过单击旁边的复选标记将每个答案的最佳/最有帮助的答案标记为已接受。

标签: python regex re


【解决方案1】:
import re
regex = re.compile('uniprotkb:P([0-9]*)')
print regex.findall(string)

【讨论】:

  • 请注意,这会打印与正则表达式匹配的所有内容的列表
【解决方案2】:

嗯,一方面,我建议您使用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:,则正则表达式匹配一串字母数字字符。

【讨论】:

    【解决方案3】:

    使用正则表达式:

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

    【讨论】:

    • 非常适合我。
    【解决方案4】:

    re 模块在这里是非常不必要的 如果 x 是静态的并且总是匹配每行末尾的子字符串(如"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):]
    

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

    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 = "|" 替换为列分隔符。

    【讨论】:

    • 更新了答案。我假设列由“|”分隔。
    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多