-1
votes

Comment vérifier si une chaîne est une sous-chaîne d'un autre, même si non dans l'ordre?

Y a-t-il un moyen de vérifier si une chaîne contient une autre chaîne mais pas nécessairement dans le bon ordre: xxx


11 commentaires

Pourquoi le second est-il faux?


Si vous changez de sous-chaînes à Regex ou en boucle dessus


Vous pouvez diviser la première chaîne et vérifier chaque mot.


@Depperm La question dit: «Pas nécessairement dans le bon ordre».


Votre libellé indique que la commande devrait être sans importance?


petit. ce faux est maintenant vrai. Il y a tout mon travail. Et aussi ceux de certaines réponses jusqu'à présent.


désolé j'ai refixé la question qui a été une erreur


Fermer jusqu'à ce que l'Op comprenne ce qu'il veut.


La réponse est correctement posée maintenant je revue tout


2ème et 4ème exemples sont identiques.


Non, la commande n'est pas la même


3 Réponses :


1
votes

Modifiez la sous-chaîne en une expression régulière avec . * code> entre chaque caractère, puis utilisez re.search code>.

import re

def fuzzy_substring(needle, haystack):
    regex = ".*".join(re.escape(char) for char in needle)
    return re.search(regex, haystack)


0 commentaires

1
votes

Vous pouvez utiliser des expressions régulières construites par programmation:

['hello my friend']
[]
['h.e.l. .m.y. .f.r.e.n.d']


0 commentaires

0
votes

Si je comprends bien votre question et les exemples correctement, vous pouvez utiliser Colections.Counter Code> Pour compter les caractères dans les deux chaînes et voir s'il reste des caractères restants après soustrayez la seconde du premier.

isin("hel my frgend", "hello my friend") # False
isin("hel my frend", "my frind hello") # False
isin("hel my frend", "h.e.l. .m.. .f.r.e.n.d") # False


0 commentaires