使用位置从字符串中提取字母

时间:2015-01-03 19:19:21

标签: python string extract

我是Python的初学者,我使用的是Python 2.7。

我有一个DNA序列(字符串dna),我必须根据它们在dna字符串中的位置提取字母。该位置由字符串sequence定义,其中点前的第一个数字是指从dna字符串中提取的第一个字母,第二个数字是最后一个字母。

我必须使用循环执行此操作,使python程序尽可能简单。我花了几天时间尝试编写代码,但我无法使其工作。这是我到目前为止所做的,但它不起作用。有帮助吗?

dna='abcde'    
sequence=' 0..2, 4..5, 4..5'   
import re    
b=re.finditer('([0-9]{1}\.\.([0-9]{1}))', sequence)    
for j in b:        
   print int(j.group(2))    
a=re.finditer('(([0-9]{1})\.\.[0-9]{1})', sequence)    
for f in a:    
   print int(f.group(2))    
for element in sequence:    
   print dna[int(f.group(2)):int(j.group(2))]    

3 个答案:

答案 0 :(得分:0)

你在模式之前省略r

>>> b=re.finditer(r'([0-9]{1}\.\.([0-9]{1}))', sequence) 
>>> for j in b:
...    print int(j.group(2))
... 
5
5

但是为了拆分您不需要正则表达式的序列,您可以使用列表推导和str.split()

>>> l=[i.split('..') for i in sequence.split(',')]
>>> [(int(i),int(j)) for i,j in l]
[(0, 2), (4, 5), (4, 5)]

>>> for i,j in indices :
...    print dna[i:j]
... 
ab
e
e

答案 1 :(得分:0)

怎么样......:

dna='abcde'    
sequence=' 0..2, 4..5, 4..5'   
import re    
b=re.finditer(r'([0-9]+)\.\.([0-9]+)', sequence)    
for j in b:        
   print dna[int(j.group(1)) : int(j.group(2))]

打印

ab
e
e

因为Python中的切片排除了最后一个索引。如果您想要查看abcef,只需将print更改为

   print dna[int(j.group(1)) : int(j.group(2)) + 1]

,只需在切片语法的右侧部分添加1即可。

答案 2 :(得分:0)

import re
dna='abcde'    
sequence='0..2, 4..5, 4..5'
positionlist = sequence.split(", ") #splits string on, and puts parts in list
dnalist = list(dna) #splits to seperate letters
for i in xrange(len(positionlist)): #make an array of arrays (last array has 2 values, start and stop)
    range1 = positionlist[i].split("..") 
    range1 = map(int,range1) #convert from string to integer
    print dnalist[range1[0]:range1[1]]

这是一个没有正则表达式的实现。可能不是最容易的,但我也像你一样是初学者,并为我自己做了这个测试。