Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/10/2020, à 17:58

chris7522

xpression régulieres (python)

Boujour a toutes et a tous ,
Que signifie cette expression :

sample = "    Isaac Newton, physicist"
match = re.search(r"(\w+) (?P<name>\w+)", sample)

    On utilise le module re et la methode search pour rechercher quelque chose dans la chaine 
    On utilise le raw string (r"...)
    Il faut que ce soit un caractere non alphanumerique .
Et le reste ? Je ne comprends pas
Merci de votre aide

Hors ligne

#2 Le 08/10/2020, à 18:09

beuguissime

Re : xpression régulieres (python)

Bonsoir,
Regarde déjà ici. Tous les symboles sont décrits et tu devrais pouvoir décomposer la regex. Reviens si ça n'est toujours pas clair.

Hors ligne

#3 Le 08/10/2020, à 18:57

pseudofab

Re : xpression régulieres (python)

Bonsoir,
... et pour tester une expression --> https://regex101.com/


# Là pour le plaisir de découvrir ...
# Envie d'apprendre Bash ou Python? Pensez aux MOOC ---> https://forum.ubuntu-fr.org/viewtopic.php?id=2030646

Hors ligne

#4 Le 09/10/2020, à 10:24

chris7522

Re : xpression régulieres (python)

Merci de votre aide .
pour ce qui est de ce groupe :

(?P<name>\w+)

Dans le cours , il est dit qu'il est possible de donner un nom à un morceau de la regex, ici on donne le nom de "name " a ce groupe .
Cela spécifie que ce groupe pourra être référencé sous le nom "name". Référencé , mais pourquoi faire ?

Dans l'outil de test que tu m'as donné , il est dit :

Named Capture Group name (?P<name>\w+)
\w+
matches any word character (equal to [a-zA-Z0-9_])
+ Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
" matches the character " literally (case sensitive)
Your regular expression does not match the subject string.

Hors ligne

#5 Le 09/10/2020, à 10:59

pseudofab

Re : xpression régulieres (python)

chris7522 a écrit :

Merci de votre aide .
pour ce qui est de ce groupe :

(?P<name>\w+)

Dans le cours , il est dit qu'il est possible de donner un nom à un morceau de la regex, ici on donne le nom de "name " a ce groupe .
Cela spécifie que ce groupe pourra être référencé sous le nom "name". Référencé , mais pourquoi faire ?

Bonjour,
imaginons que l'on cherche un texte entre deux balises nommées [balise]:
exemple :
string=" Pierre pendouille sur sa croix... [balise]Pierre aime les glaces à la vanille[balise] ,mais pas celles au chocolat"
le pattern pourrait être (c'est le group 2 (.*) qui nous intéresse) :
pattern = r"(?P<b>\[balise\])(.*)(?P=b)"
autre écriture possible:
pattern = r"(?P<b>\[balise\])(.*)\1"


# Là pour le plaisir de découvrir ...
# Envie d'apprendre Bash ou Python? Pensez aux MOOC ---> https://forum.ubuntu-fr.org/viewtopic.php?id=2030646

Hors ligne

#6 Le 10/10/2020, à 11:16

chris7522

Re : xpression régulieres (python)

Merci pour ton explication  smile

Hors ligne

#7 Le 11/10/2020, à 16:27

chris7522

Re : xpression régulieres (python)

Si je peux me permettre une derniere chose :
   Pourquoi ce n'est pas correcte ? :

#!/usr/bin/env python3

regex = r"^(\w)*+(:)+(\w)+(:)*"

chaines=['Daniel:Durand',
'Jean:Dupont:',
'Jean:Dupont::',
':Dupontel',
'Jean-Noël:Dupont-Nemours',
'Charles-Henri:Du Pré',
'Charles Henri:DuPré']

for chaine in chaines:
    match=re.match(regex,chaine)
    if match:
        print(f"{chaine:16} --> Match !!")
    
		

Merci de votre aide

Hors ligne

#8 Le 11/10/2020, à 17:16

pingouinux

Re : xpression régulieres (python)

Bonjour,
Il manque déjà

import re

mais il reste d'autres erreurs.

Dernière modification par pingouinux (Le 11/10/2020, à 17:18)

Hors ligne

#9 Le 11/10/2020, à 17:17

pseudofab

Re : xpression régulieres (python)

Bonjour,
Tu as oublié l'import du module re.
Ton expression est incorrecte , tu ne peux pas ecrire regex = r"^(\w)*+(:)+(\w)+(:)*"
car * correspond à 0 répétition ou plus de l'expression qui précède, tandis que pour + c'est 1 répétition ou plus.

Dernière modification par pseudofab (Le 11/10/2020, à 17:18)


# Là pour le plaisir de découvrir ...
# Envie d'apprendre Bash ou Python? Pensez aux MOOC ---> https://forum.ubuntu-fr.org/viewtopic.php?id=2030646

Hors ligne

#10 Le 11/10/2020, à 19:23

chris7522

Re : xpression régulieres (python)

pingouinux a écrit :

Bonjour,
Il manque déjà

import re

mais il reste d'autres erreurs.

Je suis meme pas fichu de faire un copié collé !

Pour mon expression , je voulais :
-  Commencer par une suite alphanumerique possiblement nulle
- Un separateur   "  :  "
- Puis une suite alphanumerique
- Encore " : " (optionnelle)

  Lorsque je compile , j'ai ceci :

chris@chris:~/Bureau/Essai$ python3 essai34.py
Traceback (most recent call last):
  File "essai34.py", line 15, in <module>
    match=re.match(regex,chaine)
  File "/usr/lib/python3.8/re.py", line 191, in match
    return _compile(pattern, flags).match(string)
  File "/usr/lib/python3.8/re.py", line 304, in _compile
    p = sre_compile.compile(pattern, flags)
  File "/usr/lib/python3.8/sre_compile.py", line 764, in compile
    p = sre_parse.parse(p, flags)
  File "/usr/lib/python3.8/sre_parse.py", line 948, in parse
    p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0)
  File "/usr/lib/python3.8/sre_parse.py", line 443, in _parse_sub
    itemsappend(_parse(source, state, verbose, nested + 1,
  File "/usr/lib/python3.8/sre_parse.py", line 671, in _parse
    raise source.error("multiple repeat",
re.error: multiple repeat at position 6
chris@chris:~/Bureau/Essai$ 

Je vois pas ou j'ai fauté ..

Hors ligne

#11 Le 11/10/2020, à 19:27

pseudofab

Re : xpression régulieres (python)

C'est à cause de l'association +* comme je l'explique en #9


# Là pour le plaisir de découvrir ...
# Envie d'apprendre Bash ou Python? Pensez aux MOOC ---> https://forum.ubuntu-fr.org/viewtopic.php?id=2030646

Hors ligne

#12 Le 11/10/2020, à 19:33

chris7522

Re : xpression régulieres (python)

Ha ok daccord . Je vais essayer de changer ca .
Merci

Hors ligne

#13 Le 11/10/2020, à 19:43

chris7522

Re : xpression régulieres (python)

regex = r"^[\w|\w*]+[:]+[\w]+[:]*"

Ca c'est mieux , mais je veux aussi que ca match lorsqu'il n'y a pas de suite de caractere avant le 1 er " : "

Dernière modification par chris7522 (Le 11/10/2020, à 20:02)

Hors ligne

#14 Le 11/10/2020, à 20:06

pingouinux

Re : xpression régulieres (python)

chris7522 #10 a écrit :

Pour mon expression , je voulais :
-  Commencer par une suite alphanumerique possiblement nulle
- Un separateur   "  :  "
- Puis une suite alphanumerique
- Encore " : " (optionnelle)

Cela suffit :

regex = r"\w*:\w+:?"

Commencer par
Comme tu utilises re.match, et non re.search, le ^ est inutile.

une suite alphanumerique possiblement nulle
\w*

Un separateur   " : " (sans les espaces)
:

Puis une suite alphanumerique
\w+

Encore " : " (optionnelle) (toujours sans les espaces)
:?

Hors ligne

#15 Le 11/10/2020, à 20:28

chris7522

Re : xpression régulieres (python)

Super ! Merci
Isoler les différentes parties avec des parentheses ou crochets et les séparer par un  " + " , n'est pas obligatoire finalement .

Hors ligne

#16 Le 11/10/2020, à 21:06

pingouinux

Re : xpression régulieres (python)

Isoler les différentes parties avec des parentheses ou crochets et les séparer par un  " + " , n'est pas obligatoire finalement .

Ça dépend du contexte.
Le + ne sépare rien : il indique que ce qui précède peut doit apparaître une ou plusieus fois.
Par exemple :
[abc] représente un des 3 caractères a, b ou c. Si on n'y met qu'un seul caractère, inutile de mettre les crochets.
(toto)+ signifie que "toto" doit apparaître une ou pluieurs fois.

Édité : Petite correction

Dernière modification par pingouinux (Le 12/10/2020, à 05:35)

Hors ligne

#17 Le 12/10/2020, à 06:22

chris7522

Re : xpression régulieres (python)

Merci a tous .
La syntaxe des expressions régulieres est ellle la meme en python et en java ?

Hors ligne

#18 Le 12/10/2020, à 06:42

pseudofab

Re : xpression régulieres (python)

Je ne programme  pas en java...
Tu peux constater les simillitudes/divergences entre les expressions rationnelles de python/java sur le tableau de wikipédia : https://fr.wikipedia.org/wiki/Expression_régulière


# Là pour le plaisir de découvrir ...
# Envie d'apprendre Bash ou Python? Pensez aux MOOC ---> https://forum.ubuntu-fr.org/viewtopic.php?id=2030646

Hors ligne

#19 Le 12/10/2020, à 15:26

chris7522

Re : xpression régulieres (python)

Merci a toi .
Une toute derniere  chose big_smile
Comment traduire dans une expression : un caractere alphanumerique (répété une ou plusieurs fois) a l'exeption des majuscules

Hors ligne

#20 Le 12/10/2020, à 15:43

pingouinux

Re : xpression régulieres (python)

Comment traduire dans une expression : un caractere alphanumerique (répété une ou plusieurs fois) a l'exeption des majuscules

'[0-9a-z]+'

Hors ligne

#21 Le 12/10/2020, à 15:46

chris7522

Re : xpression régulieres (python)

Merci !

Hors ligne