Désolé si cela a déjà été demandé, je n'arrive pas à trouver la réponse nulle part.
J'ai donc une entrée utilisateur pour un programme d'analyse de séquence ADN, je veux vérifier si l'entrée est en fait une séquence c'est-à-dire qu'il contient A, C, T, G ou a, c, t, g.
J'ai pensé à implémenter une expression régulière où la re.search renverrait True si le format correct était trouvé. Ensuite, si c'est faux, je peux demander à nouveau l'entrée, etc.
Mais je n'arrive pas à faire les choses correctement. Toute aide serait très appréciée! J'ai l'impression de tourner en rond!
3 Réponses :
Vous pouvez utiliser les opérateurs de début et de fin de chaîne, puis spécifier les caractères de votre choix, une ou plusieurs fois, comme ceci:
^[actgACTG]+$
Vous pouvez trouver votre exemple ici: https://regex101.com/r/CgiTEL/1
Solution non-Regex. Cette fonction vérifiera la chaîne et retournera False si un caractère ne correspond pas à quelque chose dans votre liste désignée, sinon retournera True
def test(string_input):
for s in string_input: # loop through each character in the string
if s.lower() not in ["a", "c", "t", "g"]: # lower() to change s to lowercase
return False
else: # if all characters in string pass at end of loop return True
return True
string_input = "AATG!4"
test(string_input)
>> False
Vous devez vérifier que la chaîne contient ACTG en minuscules ou majuscules et seulement eux, vous devez donc ancrer l'expression au début et à la fin de la ligne:
import re
re.match("(?i)^[ACTG]+$", input)