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? ).