Expressions régulières
Résolu
jlouis45170
-
Utilisateur anonyme -
Utilisateur anonyme -
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.
Si quelque'un(e) peut m'aider merci par avance.
JLouis
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
A voir également:
- Expressions régulières
- Expressions régulières "ne contient pas ..." ✓ - Forum Programmation
- Expressions francaises - Forum Études / Formation High-Tech
- Kyocera Ecosys P3060dn, traces régulières - Forum Imprimante
- Expressions visage bitmoji ✓ - Forum Snapchat
- Que veulent dire les expressions lol et mdr ? ✓ - Forum Loisirs / Divertissements
3 réponses
Bonjour, il y a une petite subtilité à savoir avec 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
>>> 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)
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
Dans ton code tu travaille ligne par ligne, mais comme le montre l'exemple, il est possible de traiter le texte entier
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
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
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
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
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
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
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.
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.