re.finditer() 为开始和结束方法返回相同的值
re.finditer() returning same value for start and end methods
我在使用 python 中的 re.finditer() 方法时遇到了一些问题。例如:
>>>sequence = 'atgaggagccccaagcttactcgatttaacgcccgcagcctcgccaaaccaccaaacacacca'
>>>[[m.start(),m.end()] for m in re.finditer(r'(?=gatttaacg)',sequence)]
out: [[22,22]]
如您所见,start()
和 end()
方法给出相同的值。我之前已经注意到了这一点,并且最终使用 m.start()+len(query_sequence)
而不是 m.end()
,但我很困惑为什么会这样。
sequence = 'atgaggagccccaagcttactcgatttaacgcccgcagcctcgccaaaccaccaaacacacca'
print [[m.start(),m.end()] for m in re.finditer(r'(gatttaacg)',sequence)]
删除 lookahead
。它不只捕获断言。
输出:[[22, 31]]
如果必须使用lookahead
,请使用
sequence = 'atgaggagccccaagcttactcgatttaacgcccgcagcctcgccaaaccaccaaacacacca'
print [[m.start(),m.start()+len("aca")] for m in re.finditer(r'(?=aca)',sequence)]
按照规定,您需要找到重叠的匹配项并需要先行。但是,您似乎知道要查找的确切字符串。这个怎么样?
def find_overlapping(sequence, matchstr):
for m in re.finditer('(?={})'.format(matchstr)):
yield (m.start(), m.start() + len(matchstr))
或者,您可以使用 third-party Python regex module, as described here.
regex模块支持与finditer重叠:
import regex
sequence = 'acaca'
print [[m.start(), m.end()] for m in regex.finditer(r'(aca)', sequence, overlapped=1)]
[0, 3], [2, 5]]
如果不知道子序列的长度a-priori,那么你可以在lookahead中使用匹配组并取其span:
[m.span(1) for m in re.finditer(r'(?=(gatttaacg))',sequence)] == [(22,31)]
例如查找所有重复的字符:
[m.span(1) for m in re.finditer(r'(?=(([acgt])+))',sequence)]
我在使用 python 中的 re.finditer() 方法时遇到了一些问题。例如:
>>>sequence = 'atgaggagccccaagcttactcgatttaacgcccgcagcctcgccaaaccaccaaacacacca'
>>>[[m.start(),m.end()] for m in re.finditer(r'(?=gatttaacg)',sequence)]
out: [[22,22]]
如您所见,start()
和 end()
方法给出相同的值。我之前已经注意到了这一点,并且最终使用 m.start()+len(query_sequence)
而不是 m.end()
,但我很困惑为什么会这样。
sequence = 'atgaggagccccaagcttactcgatttaacgcccgcagcctcgccaaaccaccaaacacacca'
print [[m.start(),m.end()] for m in re.finditer(r'(gatttaacg)',sequence)]
删除 lookahead
。它不只捕获断言。
输出:[[22, 31]]
如果必须使用lookahead
,请使用
sequence = 'atgaggagccccaagcttactcgatttaacgcccgcagcctcgccaaaccaccaaacacacca'
print [[m.start(),m.start()+len("aca")] for m in re.finditer(r'(?=aca)',sequence)]
按照规定,您需要找到重叠的匹配项并需要先行。但是,您似乎知道要查找的确切字符串。这个怎么样?
def find_overlapping(sequence, matchstr):
for m in re.finditer('(?={})'.format(matchstr)):
yield (m.start(), m.start() + len(matchstr))
或者,您可以使用 third-party Python regex module, as described here.
regex模块支持与finditer重叠:
import regex
sequence = 'acaca'
print [[m.start(), m.end()] for m in regex.finditer(r'(aca)', sequence, overlapped=1)]
[0, 3], [2, 5]]
如果不知道子序列的长度a-priori,那么你可以在lookahead中使用匹配组并取其span:
[m.span(1) for m in re.finditer(r'(?=(gatttaacg))',sequence)] == [(22,31)]
例如查找所有重复的字符:
[m.span(1) for m in re.finditer(r'(?=(([acgt])+))',sequence)]