Menu

Expressions régulières [Résolu]

-
Bonjour,
J'ai un problème avec les expressions régulières...
Je recherche dans une chaîne de caractères placée dans une variable (ligne) si je trouve "http" ainsi qu' une suite de caractères alpha suivi d'un point suivant de "fr/"
Voila mon bout de code (début) qui ne fonctionne pas (la regex est fausse mais même avec ca je en trouve pas de http dans mes lignes lues.

fic_entree = open("EXPORT.CSV","r",errors='ignore')
ligne_lue = fic_entree.readline()
regex = r"(http)"
for ligne_lue in fic_entree:
    ligne_sor = ""
    if re.match(regex,ligne_lue) is not None:
        nbr_lue += 1


Si quelque'un(e) peut m'aider merci par avance.
JLouis


Configuration: Windows / Chrome 71.0.3578.98
Afficher la suite 

Votre réponse

3 réponses

0
Merci
Bonjour, il y a une petite subtilité à savoir avec re.match.

>>> import re
>>> re.match('http', 'ccm : https://www.commentcamarche.net/')
>>> re.match('http', 'https://www.commentcamarche.net/')
<_sre.SRE_Match object; span=(0, 4), match='http'>
>>> re.search('http', 'ccm : https://www.commentcamarche.net/')
<_sre.SRE_Match object; span=(6, 10), match='http'>
>>> help(re.match)


Help on function match in module re:

match(pattern, string, flags=0)
Try to apply the pattern at the start of the string, returning
a match object, or None if no match was found.
(END)


Ce qui signifie que
re.match(expr) == re.search(^expr)
Commenter la réponse de landru
Messages postés
13316
Date d'inscription
mardi 11 mars 2003
Statut
Non membre
Dernière intervention
25 mai 2019
342
0
Merci
Bonjour
est ce que ceci te conviendrait

http://regexstorm.net/tester?p=http.%2B%5C.fr%2F&i=http%3A%2F%2Ftoto.fr%2F%0D%0Acoucouhttp%3A%2F%2Ftoto.fr%2Fmachin%0D%0Ahttp%3A%2F%2Ftoto.fr%0D%0Ahttptoto.fr%2F%0D%0A

Ou faut il s'assurer
  • qu'après le http il y ait "://"
  • que http soit en début de ligne


Dans ton code tu travaille ligne par ligne, mais comme le montre l'exemple, il est possible de traiter le texte entier


Quand j'étais petit, la mer Morte n'était que malade.
George Burns
jlouis-01_45170
Messages postés
7
Date d'inscription
mardi 29 janvier 2019
Statut
Membre
Dernière intervention
3 février 2019
-
Je te remercie MAIS je débute en python et j'ai besoin de récupérer uniquement les lignes qui contiennent http et une extension de domaine comme .fr.
Voila ou j'en suis et ca ne fonctionne pas..... je craque. ce que je veux c'est récupérer dans ligne_sr uniquement les lignes qui contiennent le pattern.
merci de ton aide.

fic_entree = open("EXPORT.CSV","r",errors='ignore')
ligne_lue = fic_entree.readline()
regex = r"(http.+\.fr/)"
for ligne_lue in fic_entree:
ligne_sor = ""
ligne_sor = re.match(regex,ligne_lue)
if ligne_sor != "":
nbr_lue += 1
Whismeril
Messages postés
13316
Date d'inscription
mardi 11 mars 2003
Statut
Non membre
Dernière intervention
25 mai 2019
342 -
besoin de récupérer uniquement les lignes qui contiennent http et une extension de domaine comme .fr.


Une regex c’est très précis. Et ta description ne l’est pas.
De plus, je t’ai posé 2 questions auxquelles tu n’as pas répondues.
jlouis-01_45170
Messages postés
7
Date d'inscription
mardi 29 janvier 2019
Statut
Membre
Dernière intervention
3 février 2019
-
pour tes 2 questions, je dirais peu importe. Imaginons que je recherche toutes les lignes qui contiennent http et .fr c'est juste pour me permettre de démarrer sur les regex en python
Commenter la réponse de Whismeril
jlouis-01_45170
Messages postés
7
Date d'inscription
mardi 29 janvier 2019
Statut
Membre
Dernière intervention
3 février 2019
-
Merci encore mais ca ne fonctionne pas avec le code ci-dessous, toutes les lignes sont sélectionnées alors qu'elles ne devraient pas l'être... grrrrr

fic_entree = open("EXPORT.CSV","r",errors='ignore')
ligne_lue = fic_entree.readline()
regex = "(^|\n).*http.+\.fr.*(\r|$)"
for ligne_lue in fic_entree:
ligne_sor = ""
ligne_sor = re.match(regex,ligne_lue)
if ligne_sor != "":
nbr_lue += 1
Whismeril
Messages postés
13316
Date d'inscription
mardi 11 mars 2003
Statut
Non membre
Dernière intervention
25 mai 2019
342 -
Pour poster un code, merci d'utiliser les balises de code, explications ici https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Entre autre cela conserve l'indentation, qui est essentielle ben Python.

D'autre part, je ne code pas en Python, donc je ne sais pas te dire en détails ce qui ne va pas, cependant, il semble que tu continues à traiter ligne par ligne, ce qui est inutile. Sur le site exemple y'a pas de boucle, et pourtant il y a plusieurs lignes sélectionnées.
jlouis-01_45170
Messages postés
7
Date d'inscription
mardi 29 janvier 2019
Statut
Membre
Dernière intervention
3 février 2019
-
ok c'est bon grace à toi j'ai trouvé je vais continuer à apprendre
merci pour tout
bien à toi
jean-Louis
Whismeril
Messages postés
13316
Date d'inscription
mardi 11 mars 2003
Statut
Non membre
Dernière intervention
25 mai 2019
342 -
de rien, pense à marquer le sujet résolu avec la roue dentée tout en haut.
Commenter la réponse de Whismeril