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?
4 Réponses :
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*'(.*?)'
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')
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:
( 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. \((\d+)\).*?'(\w+)'
Vous pouvez trouver l'exemple d'exécution de l'implémentation ci-dessus dans ici.
Merci à tous pour la réponse très utile. Mon problème a été résolu ^^
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? ).
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.