2009-05-23 3 views
1

Спасибо заранее. Я хочу найти всю подстроку, которая встречается между K и N, в то время как K и N происходят между любыми количеством раз. например
a = 'KANNKAAN'Найти подстроку

OUTPUT;
[KANNKAAN, KANN, KAN, KAAN]

+0

Если Вы удовлетворены предоставленной решением, пожалуйста, отметьте ответ, как принято, спасибо. –

ответ

2
import re 

def occurences(ch_searched, str_input): 
    return [i.start() for i in re.finditer(ch_searched, str_input)] 

def betweeners(str_input, ch_from, ch_to): 
    starts = occurences(ch_from, str_input) 
    ends = occurences(ch_to, str_input) 
    result = [] 
    for start in starts: 
     for end in ends: 
      if start<end: 
       result.append(str_input[start:end+1]) 
    return result 

print betweeners('KANNKAAN', "K", "N") 

Это то, что Вам нужно?

+0

да спасибо. Полезный для анализа последовательности – 2009-05-23 09:24:28

1

Другой способ:

def findbetween(text, begin, end): 
    for match in re.findall(begin + '.*' +end, text): 
     yield match 
     for m in findbetween(match[1:], begin, end): 
      yield m 
     for m in findbetween(match[:-1], begin, end): 
      yield m 

>>> list(findbetween('KANNKAAN', 'K', 'N')) 
['KANNKAAN', 'KAAN', 'KANN', 'KAN'] 
Смежные вопросы