Maison >développement back-end >Tutoriel Python >Pourquoi `re.findall()` renvoie-t-il des résultats vides lors de la correspondance de nombres à virgule flottante en Python ?
re.findall Misbehavior : Résultats vides indésirables
Dans le scénario donné, tandis que re.search() a extrait avec succès la valeur numérique prévue " 123" de la chaîne source, re.findall() a produit de manière inattendue un résultat vide.
Après enquête, le coupable a été identifié comme le r'\.' partie du modèle regex. Dans les chaînes brutes (préfixées par r), \ est traité littéralement, correspondant à un caractère barre oblique inverse suivi de n'importe quel caractère sauf une nouvelle ligne. Cependant, ce n'est pas le comportement prévu pour capturer des nombres à virgule flottante.
Pour résoudre le problème, le modèle corrigé, -?d*.?d , suit ces principes :
En utilisant ce modèle révisé, re.findall() identifie désormais correctement les valeurs numériques dans la chaîne source :
import re s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?\d*\.?\d+' L = re.findall(pattern, s) print(L) # Output: ['123', '3.1415926']
N'oubliez pas que pour que re.findall() renvoie des valeurs de correspondance sans capturer de groupes, le modèle doit être exempt de tout groupe de capture ou groupes non capturants (par exemple (?:)), sauf s'il y a des références arrière dans le modèle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!