Maison >développement back-end >Tutoriel Python >Pourquoi `re.findall()` renvoie-t-il une liste vide lorsque `re.search()` trouve une correspondance ?
La fonction re.findall() peut prêter à confusion si elle ne renvoie pas les résultats attendus lorsqu'elle correspondant à une chaîne. Explorons les raisons de son comportement dans un cas spécifique.
Considérez la chaîne source suivante :
s = r'abc123d, hello 3.1415926, this is my book'
Et le modèle suivant :
pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
Avec re.search, nous obtenons le bon result :
m = re.search(pattern, s) print(m) # <_sre.SRE_Match object; span=(3, 6), match='123'>
Cependant, re.findall renvoie une liste vide :
L = re.findall(pattern, s) print(L) # []
Il y en a deux aspects clés à considérer :
Pour faire correspondre correctement les valeurs numériques, utilisez plutôt le modèle suivant :
pattern = r'-?\d*\.?\d+'
Ce motif correspond à :
Avec ce modèle corrigé, re.findall renverra la liste attendue :
['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!