92 votes

Recherche de caractères génériques Python dans une chaîne de caractères

Disons que j'ai une liste

list = ['this','is','just','a','test']

comment puis-je faire en sorte qu'un utilisateur effectue une recherche joker ?

Mot clé : 'th_s'.

Retournerait 'ceci'.

185voto

phihag Points 89765

Utilisez fnmatch :

import fnmatch
lst = ['this','is','just','a','test']
filtered = fnmatch.filter(lst, 'th?s')

Si vous voulez permettre _ comme un joker, il suffit de remplacer tous les caractères de soulignement avec '?' (pour un caractère) ou * (pour les caractères multiples).

Si vous voulez que vos utilisateurs utilisent des options de filtrage encore plus puissantes, envisagez de leur permettre d'utiliser expressions régulières .

60voto

Yuushi Points 10656

Les expressions régulières sont probablement la solution la plus simple à ce problème :

import re
regex = re.compile('th.s')
l = ['this', 'is', 'just', 'a', 'test']
matches = [string for string in l if re.match(regex, string)]

8voto

Vous pouvez essayer le fnmatch il dispose d'une syntaxe de caractères génériques de type shell

ou peut utiliser expressions régulières

re d'importation

1voto

Kos Points 29125

Voulez-vous parler d'une syntaxe spécifique pour les caractères génériques ? En général, * signifie "un ou plusieurs" caractères et ? représente une seule personne.

La méthode la plus simple consiste probablement à traduire une expression joker en une expression régulière, puis à l'utiliser pour filtrer les résultats.

1voto

Farhaan Shaikh Points 11

Même idée que Yuushi en utilisant des expressions régulières, mais ceci utilise la méthode findall de la bibliothèque re au lieu d'une compréhension de liste :

import re
regex = re.compile('th.s')
l = ['this', 'is', 'just', 'a', 'test']
matches = re.findall(regex, string)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X