如何在python中获取单词后的数字
我有一个包含以下行的大型文件如何在python中获取单词后的数字,python,regex,re,Python,Regex,Re,我有一个包含以下行的大型文件DDD-1126N | refseq:NP_285726 | uniprotkb:P00112和DDD-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)] 查找(x)行中的问题是10和26,当它是26时,我获取完整
DDD-1126N | refseq:NP_285726 | uniprotkb:P00112
和DDD-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)]
查找(x)行中的问题是10和26,当它是26时,我获取完整的数字。我是编程新手,所以我正在寻找一些东西来获取单词后面的完整数字
x = 'uniprotkb:'
f = open('m.txt')
for line in f:
if x in line:
print the number after x
嗯,首先我建议你用这个来读取TSV文件 但通常,您可以使用正则表达式:
import re
regex = re.compile(r"(?<=\buniprotkb:)\w+")
for line in f:
match = regex.search(line)
if match:
print match.group()
重新导入
regex=re.compile(r)(?使用正则表达式:
import re
for line in open('m.txt'):
match = re.search('uniprotkb:P(\d+)', line)
if match:
print match.group(1)
如果x
是静态的,并且总是在每行末尾匹配一个子字符串,那么这里就不需要使用re
模块(如“DDD-1126N | refseq:NP_285726 | uniprotkb:P00112”
):
编辑:
回答您的评论。如果它们由管道字符(|
)分隔,则可以执行以下操作:
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=“|”
替换为任何列分隔符。更新了答案。我假设列之间用|"。您尚未接受大多数问题的答案。您意识到,您接受的每个问题都会获得+2的声誉?如果至少有一个答案有帮助,您应该单击旁边的复选标记,将每个问题的最佳/最有帮助答案标记为已接受。这对我来说非常有效。请注意,这将打印一个与以下内容匹配的所有内容的列表:正则表达式
DDD-1126N|uniprotkb:285726|uniprotkb:P00112
['285726', 'P00112']