2009-04-25 11 views
5

Pouvez-vous s'il vous plaît aidez-moi à obtenir les sous-chaînes entre deux caractères à chaque occurrencetrouver des sous-chaînes en python

Par exemple, pour obtenir toutes les sous-chaînes entre « Q » et « E » dans la séquence d'exemple donné dans toutes les occurrences:

ex: QUWESEADFQDFSAEDFS 

et de trouver la sous-chaîne avec une longueur minimale.

+0

Pourriez-vous s'il vous plaît examiner votre question et le rendre un peu lisible, fournissant également plus de détails? Je vous remercie. – hyperboreean

Répondre

16
import re 
DATA = "QUWESEADFQDFSAEDFS" 

# Get all the substrings between Q and E: 
substrings = re.findall(r'Q([^E]+)E', DATA) 
print "Substrings:", substrings 

# Sort by length, then the first one is the shortest: 
substrings.sort(key=lambda s: len(s)) 
print "Shortest substring:", substrings[0] 
7

RichieHindle a raison, sauf que

substrings.sort(key=len) 

est une meilleure façon d'exprimer que lambda redondant ;-). Si vous utilisez Python 2.5 ou une version ultérieure, min (sous-chaînes, key = len) vous donnera la chaîne la plus courte (la première, si plusieurs chaînes sont liées pour "le plus court") un peu plus rapidement que le tri et en prenant le [0] ème élément, bien sûr. Mais si vous êtes coincé avec 2.4 ou plus tôt, l'approche de RichieHindle est la meilleure alternative.

+0

Bon point sur le lambda - à quoi pensais-je? 8-) – RichieHindle

Questions connexes