2016-04-25 172 views
0

我對rosalind做了一個問題,它希望您返回子字符串在較長字符串中出現的位置。唯一的問題是發生重疊,輸出應該是:1,3,9(假設爲0的計數),但我只得到1和9?這是我的代碼。正則表達式:計算字符串中出現子串的次數,包括重疊出現的次數

import re 

s='GATATATGCATATACTT' 
t='ATAT' 

substrings=re.compile('ATAT') 
matches=substrings.finditer(s) 

for match in matches: 
    print(match.start()+1) #doesn't find overlapping ones 

任何幫助將不勝感激,謝謝!

回答

1

您需要使用lookahead。

import re 
s='GATATATGCATATACTT' 
t='ATAT' 
print([match.start() for match in re.finditer('(?=%s)' % t, s)]) 

輸出:

[1, 3, 9] 
+0

你真的可以解釋一下什麼是超前?我是一名Python初學者(實際上是一名編程初學者),從未聽過這句話嗎?它是如何工作的? – pythonbeginner2506

+0

我認爲這可能有助於http://stackoverflow.com/questions/2973436/regex-lookahead-lookbehind-and-atomic-groups和這個http://www.rexegg.com/regex-lookarounds.html。 – Pythonista

1

10第二搜索揭示this

您基本上必須用「(?=」和「)」來包圍RegEx。這是一個積極的預測,導致RegEx不會阻止未來匹配的字符串部分。

一定要捕捉組1

我希望我能幫上忙,

CodenameLambda爲`regex`模塊

相關問題