Python - savoir si un mot est dans un intervalle avec séparateurs particuliers
Résolu
Lena-tkd
-
Utilisateur anonyme -
Utilisateur anonyme -
A voir également:
- Python - savoir si un mot est dans un intervalle avec séparateurs particuliers
- Trousseau mot de passe iphone - Guide
- Mettre un mot de passe sur un dossier - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
- Sites de vente entre particuliers - Guide
8 réponses
Bonjour,
Pas très clair
Première phrase\nDeuxième phrases\nToisième paraphrase\nQuatrième phrase phrase phrase
Il y a 4 fois le mot phrase, c'est quoi le critère pour découper ?
Pas très clair
Première phrase\nDeuxième phrases\nToisième paraphrase\nQuatrième phrase phrase phrase
Il y a 4 fois le mot phrase, c'est quoi le critère pour découper ?
Bonjour
En un mot => Regex
Y’a plein de tuto en français sur le net sur les regex en général.
A priori pour leurs implémentations en Python, c’est plutôt en anglais.
Pour trouver la bonne syntaxe avant de l’implémenter dans ton programme, tu peux te servir de regex101.com
Ce site permet de choisir le moteur de regex python 2.7
Un exemple
https://regex101.com/r/WTnpO1/1
En un mot => Regex
Y’a plein de tuto en français sur le net sur les regex en général.
A priori pour leurs implémentations en Python, c’est plutôt en anglais.
Pour trouver la bonne syntaxe avant de l’implémenter dans ton programme, tu peux te servir de regex101.com
Ce site permet de choisir le moteur de regex python 2.7
Un exemple
https://regex101.com/r/WTnpO1/1
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
je commencerais en utilisant split, qui va te créer une liste de portions.
je commencerais en utilisant split, qui va te créer une liste de portions.
montexte= 'Première phrase\nDeuxième phrases\nToisième paraphrase\nQuatrième phrase phrase phrase' portions=montexte.split('\n') print(portions)
C'est ça:
Tu découpe ta chaine en une liste avec split et ensuite, tu parcours
la liste avec une boucle, et pour chaque élément, tu utilise les expressions régulières pour extraire phrase mais pas phrases,
ni paraphrase, bref, tout ce qui n'est pas purement
phrase et tu comptes
Tu découpe ta chaine en une liste avec split et ensuite, tu parcours
la liste avec une boucle, et pour chaque élément, tu utilise les expressions régulières pour extraire phrase mais pas phrases,
ni paraphrase, bref, tout ce qui n'est pas purement
phrase et tu comptes
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bon faut admettre que mes tests sur regex101 avec le moteur python 2.7 sont décevants.....
Ici sur regexstorm, avec le moteur .Net, cette regex
(lien à copier coller, car CCM ne l'interprète pas comme il faut)
Mais, sur regex101, en python 2.7, elle plante, j'ai trouvé un autre site, pyRegex.com où elle plante aussi.
J'ai essayé sur un site de python en ligne, ça plante aussi mais au moins y'a un message d'erreur...
Ici sur regexstorm, avec le moteur .Net, cette regex
(?<=\\n.*?)\bphrase\b(?=.*?\\n)donne directement le nombre d'occurrences
(lien à copier coller, car CCM ne l'interprète pas comme il faut)
http://regexstorm.net/tester?p=%28%3f%3c%3d%5c%5cn.*%3f%29%5cbphrase%5cb%28%3f%3d.*%3f%5c%5cn%29&i=Premi%c3%a8re+phrase%5cnDeuxi%c3%a8me+phrases+phrase%5cnToisi%c3%a8me+%2cphrase%2c+paraphrase%5cnQuatri%c3%a8me+phrase.+phrases+%3aphrase%3b+%5cn+phrase
Mais, sur regex101, en python 2.7, elle plante, j'ai trouvé un autre site, pyRegex.com où elle plante aussi.
J'ai essayé sur un site de python en ligne, ça plante aussi mais au moins y'a un message d'erreur...
Apparement Python n'accepte pas les "lookahead assertion" et "lookbehind assertion" de longueur variable....
Si je sors la longueur variable des ces assertions, ça ne reconnait plus
https://regex101.com/r/WTnpO1/3
Du coup, je me range à l'avis de Phil, un split puis une regex "toute simple" qui cherche dans chaque morceau découpé le mot pile poil.
https://regex101.com/r/WTnpO1/4
Si je sors la longueur variable des ces assertions, ça ne reconnait plus
\nQuatrième phrase. phrases :phrase; \ncomme 2 occurrences....
https://regex101.com/r/WTnpO1/3
Du coup, je me range à l'avis de Phil, un split puis une regex "toute simple" qui cherche dans chaque morceau découpé le mot pile poil.
https://regex101.com/r/WTnpO1/4
Bonjour,
Oui, on peut utiliser la notion de boundary (\b)
pour délimiter phrase :
Oui, on peut utiliser la notion de boundary (\b)
pour délimiter phrase :
print('\nExact match') montexte= 'Première phrase\nDeuxième phrases\nToisième paraphrase\nQuatrième phrase phrase phrase' portions=montexte.split('\n') print(portions) pattern ='\\bphrase\\b' print(re.findall(pattern, portions[1]))
Bonjour,
Et merci à tous pour vos réponses. En me basant dessus, je suis parvenue au code suivant, qui semble faire le job, puisque j'obtiens 2 en résultat:
Merci!
Et merci à tous pour vos réponses. En me basant dessus, je suis parvenue au code suivant, qui semble faire le job, puisque j'obtiens 2 en résultat:
montexte='Première phrase\nDeuxième phrases\nToisième paraphrase\nQuatrième phrase phrase phras\n' portions=montexte.split('\n') co=0 for portion in portions: if re.search(r'\bphrase\b',portion): co+=1 print(co)
Merci!
Et merci pour votre réponse. Comme indiqué dans ma demande, le délimiteur est ici '\n' mais j'aurais pu utiliser tout autre symbole ou chaîne de caractère. Et la question est de savoir dans combien de ces intervalles le mot 'phrase' apparaît (et non connaître l'occurrence totale).
Merci encore