Pages : 1
#1 Le 08/10/2020, à 18: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, à 19: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, à 19:57
- Compte supprimé
Re : xpression régulieres (python)
Bonsoir,
... et pour tester une expression --> https://regex101.com/
#4 Le 09/10/2020, à 11: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, à 11:59
- Compte supprimé
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 ?
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"
#6 Le 10/10/2020, à 12:16
- chris7522
Re : xpression régulieres (python)
Merci pour ton explication
Hors ligne
#7 Le 11/10/2020, à 17: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, à 18: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, à 18:18)
Hors ligne
#9 Le 11/10/2020, à 18:17
- Compte supprimé
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 Compte supprimé (Le 11/10/2020, à 18:18)
#10 Le 11/10/2020, à 20:23
- chris7522
Re : xpression régulieres (python)
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, à 20:27
- Compte supprimé
Re : xpression régulieres (python)
C'est à cause de l'association +* comme je l'explique en #9
#12 Le 11/10/2020, à 20:33
- chris7522
Re : xpression régulieres (python)
Ha ok daccord . Je vais essayer de changer ca .
Merci
Hors ligne
#13 Le 11/10/2020, à 20: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, à 21:02)
Hors ligne
#14 Le 11/10/2020, à 21:06
- pingouinux
Re : xpression régulieres (python)
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, à 21: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, à 22: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, à 06:35)
Hors ligne
#17 Le 12/10/2020, à 07: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, à 07:42
- Compte supprimé
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
#19 Le 12/10/2020, à 16:26
- chris7522
Re : xpression régulieres (python)
Merci a toi .
Une toute derniere chose
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, à 16: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, à 16:46
- chris7522
Re : xpression régulieres (python)
Merci !
Hors ligne
Pages : 1