re.findall se comporte de manière imprévisible
Avec la chaîne et le motif d'origine tels que définis ci-dessous :
s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
re. La recherche trouve avec précision une correspondance, tandis que re.findall donne une liste vide. Ce comportement, qui contredit le résultat attendu de ['123', '3.1415926'], soulève la question de savoir pourquoi re.findall ne produit pas ce résultat.
Comprendre le problème
Deux considérations clés sont en jeu ici :
Modification Regex
Pour résoudre ce problème, nous pouvons modifier le modèle pour supprimer les groupes de capture redondants et faire correspondre correctement les numéros :
pattern = r'-?\d*\.?\d+'
Ce modèle correspondra :
Résultats
Utilisation de ce modifié modèle, re.findall produira le résultat attendu :
import re L = re.findall(pattern, s) print(L) # Output: ['123', '3.1415926']
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!