J'ai besoin d'un modèle d'expression régulier de Python qui correspond à un nom optionnel et un signe égal suivi d'un entier dans une fonction. Les noms de python commencent par un caractère alphabétique ou de soulignement et continuent par (alphabétique, numérique ou soussecore). Les entiers ont un signe facultatif suivi de certains nombres non nuls. Il ne permet aucun espaces dans le texte.
Les correspondances ont un nom et une valeur dans un dictionnaire. p> retournera p> import re
#pattern = r"([_]+$?[A-Za-z0-9_]+$[=][0-9])"
pattern = r"(([A-Za-z]|_)|[0-9]|[=]\d+$)"
if re.match(pattern, "LS8"):
print("Match 1")
if re.match(pattern, "_a_b_c_12_=12"):
text = "_a_b_c_12_=12"
items = text.split('=')
d = {'name': items[0], 'value': items[-1]}
print("Match 2 ", d)
if re.match(pattern, "1ab"):
print("Match 3")
3 Réponses :
Pour les cas de test données, le code suivant doit fonctionner: la sortie: p>
Vous pouvez utiliser cette regex, qui a nommé des groupes pour capturer la valeur code> et de la valeur code> de la chaîne d'entrée tel que vous avez spécifié dans la question suivante: Match 2 {'value': '12', 'name': '_a_b_c_12_'}
Match 4 {'value': '-123', 'name': None}
Vous oubliez des caractères majuscules. De plus, vous devez ajouter ^ code> et $ code> au début / la fin de la regex, sinon strings comme "9a = 2" code> correspondrait.
@Yanorestes re.match code> prend un indicateur facultatif pour lequel j'ai fourni re.i code> qui rend l'étui de regex insensible. Merci pour le commentaire sur les ancrages, j'ai ajouté le $ code> à la fin de la regex ( ^ code> n'est pas requis depuis re.match code> toujours commence au début de la chaîne)
La regex que vous recherchez est ^ ([a-za-z _] [a-za-z_0-9] *) = ([- +]? \ d +) $ code>. p>
^ code> et $ code> assure la chaîne qu'il trouve commence au début d'une ligne et se termine à la fin d'une ligne. LI>
[a-za-z _] code> obtient le premier caractère de l'identifiant Python - doit être une lettre (tout cas) ou un soulignement li>
[a-za-z_0-9] * code> obtient les caractères suivants (le cas échéant, comme le * code> spécifie) de l'identifiant, qui peut être le même de le premier caractère plus tous les chiffres li>
= code> - un signe égal li>
[+ -]? \ d + code> obtient la fin de la chaîne - un signe facultatif suivi d'une quantité de chiffres li>
ul>
Vous ne voulez pas correspondre 1 et match 3, c'est tout, non? Désolé, c'est un peu flou
Oui, vous avez compris raison.