0
votes

Comment trouver un motif d'expression régulier avec _ (soussecore), alphabets avec un nombre de caractères et se termine avec = (égal) et numéro?

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> xxx pré>

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")


2 commentaires

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.


3 Réponses :


1
votes

Pour les cas de test données, le code suivant doit fonctionner: xxx

la sortie: xxx


0 commentaires

1
votes

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}


2 commentaires

Vous oubliez des caractères majuscules. De plus, vous devez ajouter ^ et $ au début / la fin de la regex, sinon strings comme "9a = 2" correspondrait.


@Yanorestes re.match prend un indicateur facultatif pour lequel j'ai fourni re.i qui rend l'étui de regex insensible. Merci pour le commentaire sur les ancrages, j'ai ajouté le $ à la fin de la regex ( ^ n'est pas requis depuis re.match toujours commence au début de la chaîne)



0
votes

La regex que vous recherchez est ^ ([a-za-z _] [a-za-z_0-9] *) = ([- +]? \ d +) $ .

  • ^ et $ assure la chaîne qu'il trouve commence au début d'une ligne et se termine à la fin d'une ligne.
  • [a-za-z _] obtient le premier caractère de l'identifiant Python - doit être une lettre (tout cas) ou un soulignement
  • [a-za-z_0-9] * obtient les caractères suivants (le cas échéant, comme le * spécifie) de l'identifiant, qui peut être le même de le premier caractère plus tous les chiffres
  • = - un signe égal
  • [+ -]? \ d + obtient la fin de la chaîne - un signe facultatif suivi d'une quantité de chiffres

0 commentaires