J'essaie donc de créer une clause regex où il peut détecter toute combinaison de caractères 'ACTG' et accepter cela comme valide. Bien que toute autre chose - y compris une combinaison de 'ACTG' et d'autres caractères ne soit pas valide.

En fin de compte, je le retirerai de la boucle while, uniquement à des fins de test. À l'heure actuelle, je crois que tant qu'il commence par a, c, t ou g, il dit que c'est valide ...

Y a-t-il une fonction dans regex qui serait mieux adaptée que match?

import re
while (True):
    DnaString = str(input('enter your polynucleotide chain code hooblah'))
    if (re.match('([ACTG]+[ACTG]*)', DnaString, flags=0)):
        #if re.search('^ACTG', DnaString) != -1: 
            print ("valid chain.")
    else: #(re.search('^[ACTG]+[ACTG]*$', DnaString) == -1):
        print("invalid chain, please check your input.")

    if (DnaString.find("end") != -1):
        print("ohokaybye.")
        break
1
ddlem 8 mars 2016 à 06:44

3 réponses

Meilleure réponse

Pourquoi pas juste

if all(c in 'ACGT' for c in DnaString):
    # Do success
else:
    # Do failure
3
BallpointBen 8 mars 2016 à 03:54

Si vous autorisez une correspondance à répéter en interne des caractères acceptables, cela peut être ce que vous voulez:

'[A|C|T|G]{4}'
1
Lincoln Lorscheider 8 mars 2016 à 03:55

Votre problème est que vous recherchez simplement les caractères ACTG n'importe où dans la chaîne sans spécifier que rien d'autre n'est autorisé. Si vous changez votre expression régulière en ^[ACTG]+$, cela fonctionnera comme prévu. Les caractères ^ et $ sont des ancres qui signifient respectivement le début et la fin de la ligne.

Ainsi, l'expression régulière ci-dessus correspond à une chaîne qui contient un ou plusieurs des quatre caractères et n'autorise aucun autre caractère ni avant ni après.

2
Zhewriix 8 mars 2016 à 03:55