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

Python 使用位置从字符串中提取字母,python,string,extract,Python,String,Extract,我是Python的初学者,正在使用Python 2.7 我有一个DNA序列(字符串DNA),我必须根据字母在DNA字符串中的位置提取字母。该位置由字符串序列定义,其中点前的第一个数字表示要从dna字符串中提取的第一个字母,第二个数字表示最后一个字母 我必须通过循环来实现这一点,使python程序尽可能简单。我花了几天的时间试图编写代码,但一直无法使其正常工作。这是我到目前为止所做的,但它不起作用。有什么帮助吗 dna='abcde' sequence=' 0..2, 4..5, 4..5

我是Python的初学者,正在使用Python 2.7

我有一个DNA序列(字符串
DNA
),我必须根据字母在DNA字符串中的位置提取字母。该位置由字符串
序列
定义,其中点前的第一个数字表示要从
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))]    

在模式之前省略
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()

那……呢

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中,切片排除了最后一个索引。如果您想查看
abc
ef
,只需将
打印更改为

   print dna[int(j.group(1)) : int(j.group(2)) + 1]
i、 e,只需在切片语法的右侧部分添加1

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]]

这是一个没有regex的实现。这可能不是最简单的,但我和你一样也是一个初学者,我做这件事是为了测试自己。

请给出一个例子,说明根据上面显示的输入,预期的输出应该是什么样子。@AmitKumarGupta。预期输出应该是这样的:ab e ab指位置0..2和e到4..5。预期输出应该是“ab e ab”?什么我猜你漏掉了一些标点符号。请花点时间使用正确的语法、标点符号等。这样,对于试图帮助您的人来说,就尽可能简单、不易混淆了。
print int(j.group(1))
这不起作用。你检查过了吗?@AerofoilKite这是个打字错误,修正了
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]]