1
votes

Le problème des chaînes de regex contenant des caractères spéciaux en python

J'ai une chaîne: " s = string.charAt (0) == 'd' "
Je veux récupérer un tuple de ('0', 'd')
J'ai utilisé: re.search (r "\ ((.?) \) == '(.?)' &&", "string.charAt (0) == 'd'")
J'ai vérifié la variable s lors de l'impression sous la forme "\\ ((.?) \\) == '(.?)' &&"
Comment résoudre ce problème?


1 commentaires

Que voulez-vous que vous retourniez si la chaîne était "s = string.charAt (12)! = 'Abc' + 'def'" ? Vous devez indiquer la règle d'identification des caractères que vous souhaitez extraire.


4 Réponses :


2
votes

Utilisez

Var#1 = 0
Var#2 = d

Voir la preuve . La première variable est capturée dans le groupe 1 et la deuxième variable dans le groupe 2.

Code Python:

import re
string = "s = string.charAt (0) == 'd'"
match_data = re.search(r"\((.*?)\)\s*==\s*'(.*?)'", string)
if match_data:
    print(f"Var#1 = {match_data.group(1)}\nVar#2 = {match_data.group(2)}")

Sortie:

\((.*?)\)\s*==\s*'(.*?)'


0 commentaires

1
votes

Votre expression régulière doit être ". * \ ((.?) \). * '(.?) \'" . Cela obtiendra à la fois le caractère entre parenthèses et ensuite le caractère entre guillemets simples.

>>> import re
>>> s = " s = string.charAt (0) == 'd'"
>>> m = re.search(r".*\((.?)\) .* '(.?)'", s)
>>> m.groups()
('0', 'd')


0 commentaires

2
votes

Vous pouvez essayer:

import re
regex = r"\((\d+)\).*?'(\w+)'"
test_str = "s = string.charAt (0) == 'd'"
print(re.findall(regex, test_str))
# Output: [('0', 'd')]

Explication de l'expression régulière ci-dessus:

  • \( - Correspond à un ( littéralement.
  • (\d+) - Représente le premier groupe de capture correspondant aux chiffres une ou plusieurs fois.
  • \) - Correspond à un ) littéralement.
  • .*? - Lazily correspond à tout sauf une nouvelle ligne.
  • '(\w+)' - Représente le deuxième groupe de capture correspondant à ' avec n'importe quel caractère de mot ( [0-9a -zA-Z_] ) une ou plusieurs fois.

 Représentation illustrée

Démo Regex

\((\d+)\).*?'(\w+)'

Vous pouvez trouver l'exemple d'exécution de l'implémentation ci-dessus dans ici.


0 commentaires

-1
votes

Merci à tous pour la réponse très utile. Mon problème a été résolu ^^


1 commentaires

Nous sommes heureux qu'une solution ait fonctionné pour vous. Veuillez envisager d'accepter la réponse qui vous convient le mieux en cliquant sur ✓ sur la gauche (voir Comment accepter les réponses SO ) et voter toute réponse qui vous a été utile (voir Comment voter pour Stack Overflow? ).