Expressions régulières - Patterns pour RegExp

skoobi

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Salut Jean-No :),

et comme je ne veux pas qu'XLD soit dynamité :D...

Aie! c'est moi qui vais subir les foudres!!!
Je crois que je vais enlever la localisation dans ma signature :p:D.

Au plaisir.
 

MJ13

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonjour à tous

Jean-Noël: Merci pour ce nouveau concept que j'avais déjà entendu
parler (plus particulièrement par notre ami JM allias Staple1600).

En effet cela à l'air assez puissant pour tester des types de données, mais aussi très complexe. Je ne sais pas si cela va me servir mais il faudra que je l'essaie dans mes applis si le besoin s'en fait ressentir.

Alors voici ce que je viens de trouver ici pour les adresses mails:
Code:
^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+(|com|org|net|gov|biz|info|name|aero|fr|be|co.uk|it|es|de|info)+$

Issu de

How to Find or Validate an Email Address

Mais comme il est indiqué, il faut penser à:

So even when following official standards, there are still trade-offs to be made. Don't blindly copy regular expressions from online libraries or discussion forums. Always test them on your own data and with your own applications

Sinon pour les dates, sur ton fichier, on en peut pas mettre de 1 à 9. J'ai donc en m'aidant un peu des différentes sources mis ce code qui à l'air de fonctionner (je ne teste pas si le mois à moins de 31 jours), sinon avec Cdate, cela devrait le faire:

Code:
^[1-9]$|^\d{1,2}(0[1-9])|(1[0-9])|(2[0-9])|(3[0-1])$

Encore merci et bonne journée à tous :).
 

JNP

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonjour Michel :),
(plus particulièrement par notre ami JM allias Staple1600).
J'espère qu'il va bien (en vacances ?), ça fait depuis le 22/08 qu'on ne l'a pas revu :rolleyes:.
MJ13 à dit:
^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+(|com|org|net|gov|biz|info|name|aero|fr|be|co.uk|it|es|de|info)+$
J'ai juste ôté quelques caractères superflus
Code:
^([a-zA-Z0-9_\.\-])+@(([a-zA-Z0-9\-])+\.)+(com|org|net|gov|biz|info|name|aero|fr|be|co.uk|it|es|de|info)+$
c'est un seul \devant certains caractères, et l'@ est un caractère normal. Le premier | non plus ;).
MJ13 à dit:
Don't blindly copy regular expressions from online libraries or discussion forums.
Ça, c'est plus que sûr :p... Mon fichier est à titre purement testuel, et je décline toute responsabilité pour une utilisation professionnelle :D.
MJ13 à dit:
^[1-9]$|^\d{1,2}(0[1-9])|(1[0-9])|(2[0-9])|(3[0-1])$
Là, je suis moins sûr. Logiquement, ça prends 1 seul chiffre de 0 à 9, ou 1 à 2 chiffres quelconques suivi de 2 limités à 31 :confused:.
Comme tu dis, le CDate est plus sûr ;).
Je mets à jour le fichier.
Merci de ta contribution :cool:
 

JNP

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Re :),
En ce qui concerne les dates :
Code:
^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)\d\d$
accepte tous les mois jusqu'au 31 :eek:.
Code:
(^(0[1-9]|[12][0-9]|3[01])/(01|03|05|07|08|10|12)/(19|20)\d\d$)|(^(0[1-9]|[12][0-9]|30)/(04|06|09|11)/(19|20)\d\d$)|(^(0[1-9]|[12][0-9])/02/(19|20)\d\d$)
n'a qu'un défaut, il ne connait pas les années bisextiles :D.
A + :cool:
 

laetitia90

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

bonjour tous;
seulement pour dire merci a JNP & a tous les participants quel travail !!!
je suis trés impressionnée par tes connaissances JNP
encore bravo
si je vois un post qu'on peut resoudre avec
je vais méme pas oser y repondre voir avec l'ami JNP pour pas écrire de bêtises

pour skoobi je connaissais déja spécialiste des doublons doublons doublons
d'ailleurs a l'epoque j'avais recuperer son programme eh oui!!!

gros bisous a tous & merci
 

JNP

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Re :),
je suis trés impressionnée par tes connaissances JNP
Merci, mais sans jouer les faux modestes, il n'y a pas de connaissances, juste un peu de décodage (et de la logique) sur des fonctions malconnues, qui me paraissent mériter de sortir de l'ombre ;).
RegExp me parait prometteur sur beaucoup de choses. Surtout sur le fait qu'Excel, contrairement aux BDD traditionnelles, ne propose pas de masque natif :rolleyes:.
Maintenant, comme indiqué sur un certain nombre de tutos RegExp, le but n'est pas de réinventer la poudre. Si des fonctions natives existent, seule la curiosité intellectuelle doit nous pousser à les réinventer avec RegExp :p.
Et surtout, n'hésite jamais à écrire des bétises, les plus grandes découvertes ont été faite par erreur :D... Et personnellement, je ne me prive pas d'en écrire :eek:.
chris à dit:
J'espère qu'il n'y a pas cours tous les jours car Loches ce n'est pas la porte à côté même si tu n'y vas pas à cLOCHE pied !
Euh, Loches, c'est pas du côté de l'île de Sein :eek: ?
Bonne soirée et merci de vos participations :cool:
 

JNP

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonjour le fil :),
Un pattern tout simple, mais pouvant rendre service :p...
C'est souvent que je récupère du texte avec des blancs multiples, et généralement, je fait un remplacement de " " par " " plusieurs fois jusqu'à ce qu'il me renvoie "0 modifications effectuées" :eek:.
D'où une petite fonction toute simple
VB:
Function Nettoyage(ANettoyer As String)
Application.Volatile
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = " {2,}"
Nettoyage = .Replace(ANettoyer, " ")
End With
End Function
Il faudra que j'essaie sous Word en supprimant aussi le blanc en début ou fin de phrase ainsi que les tabulations :rolleyes:.
Il y a un RegExp d'extraction de codes postaux sur ce fil.
D'autre part, je suis tombé sur un site pour les gourmands de RegExp (2700 Pattern :p) ICI.
Bon WE à toutes et à tous :cool:
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonjour JNP,
n'existe-t-il pas un symbole permettant d'indiquer une espace (comme il en existe pour indiquer un début ou une fin de chaîne ou de mot ?
 

chris

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonjour

...
C'est souvent que je récupère du texte avec des blancs multiples...Il faudra que j'essaie sous Word en supprimant aussi le blanc en début ou fin de phrase ainsi que les tabulations

Dans Word cela existe déjà en utilisant le cherche et remplace et en déroulant plus et spécial. Si on connaît déjà les codes c'est encore plus rapide

  • ^w pour des espaces quel qu'en soit le nombre mais aussi les tabulations
    donc remplacer ^w par espace réduit à 1 espace résultant ou supprime les tabulations.
  • ^t pour tabulation : si on veut en remplacer plusieurs par une ou en placer. Mais il est vrai que là, l'utilisation des expressions régulières permet d'en remplacer plusieurs d'un coup.
    Comme le montre l'exemple que j'avais posté Word les gère.
    Le plus difficile est de les écrire :rolleyes: du moins pour moi
  • à noter que la fin de paragraphe est ^p : en utilisant cherche et remplace de ^w^p par ^p on enlève les espaces inutiles en fin de paragraphes et avec ^p^w remplacé par ^p ceux inutiles en début.
Voilà ma modeste contribution au schmilblick mais je me suis souvent servi de ces possibilités de Word pour nettoyer des textes, en remettre au kilomètre...
 

JNP

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Re :),
n'existe-t-il pas un symbole permettant d'indiquer une espace (comme il en existe pour indiquer un début ou une fin de chaîne ou de mot ?
Euh, l'espace n'étant pas un opérateur, il suffit de l'utiliser :rolleyes:... Je ne suis pas vraiment la question :eek:.
Sinon, vu que tu peux déclare des ASCII en octal avec \ooo, tu peux utiliser \040 pour l'espace, \240 pour l'espace insécable (non testé pour l'insécable) ;).
En principe, tu peux déclarer de l'unicode avec \uxxxx, mais j'ai pas réussi à le faire fonctionner avec \u0032 ou \u#032 :confused:...
Sinon, l'hexa fonctionne aussi avec \x20 :D.
Après, ben la localisation du début d'un mot viens justement d'un espace et la fin aussi :p...
Je ne suis pas sûr d'avoir répondu à ta question :eek:...
Bon WE :cool:
 

JNP

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bisous Chris :),
Dans Word cela existe déjà en utilisant le cherche et remplace et en déroulant plus et spécial. Si on connaît déjà les codes c'est encore plus rapide

  • ^w pour des espaces quel qu'en soit le nombre mais aussi les tabulations
    donc remplacer ^w par espace réduit à 1 espace résultant ou supprime les tabulations.
  • ^t pour tabulation : si on veut en remplacer plusieurs par une ou en placer. Mais il est vrai que là, l'utilisation des expressions régulières permet d'en remplacer plusieurs d'un coup.
    Comme le montre l'exemple que j'avais posté Word les gère.
    Le plus difficile est de les écrire :rolleyes: du moins pour moi
  • à noter que la fin de paragraphe est ^p : en utilisant cherche et remplace de ^w^p par ^p on enlève les espaces inutiles en fin de paragraphes et avec ^p^w remplacé par ^p ceux inutiles en début.
C'est par là que je passe aussi, bien que je ne connaissait pas ^w :eek:. Mais c'est marqué Espace au singulier, ce qui n'est pas vraiment causant :p.Je rajouterais ^l qui est le retour forcé à la ligne ;).
Mais bon, ça fait quand même quelques manips...
Remplacer "^w" par " ", puis " ^p" par "^p", "^p " par "^p", etc. :D.
C'est vrai qu'on peux faire des Replace successifs via VBA, mais un beau Pattern me plairait bien, il faut que j'y réflechisse (ou si quelqu'un à une idée, je suis preneur) :p.
Il faut aussi que je fasse des tests si un pattern en Replace avec des "|" prend en priorité de gauche à droite, ou le contraire :rolleyes:...
D'ailleurs, pour ceux qui copient (honteusement :p) des PDF, un petit truc sympa, c'est de remplacer "^p^p" par "#" par exemple, puis "^p" par " ", et enfin "#" par "^p" ;).
Bon WE :cool:
 

Staple1600

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonjour à tous


Bonjour JNP

Je vois avec plaisir que tu apprécies de plus en plus regexp.

Merci pour ton initiative prosélyte et ta pièce jointe illustrative du potentiel de regexp.

Je te conseille ce lien * pour t'esbaudir devant moults patterns des plus basiques ou plus sophistiqués ;)

Bonne lecture

*: c'est ma bible

PS: une suggestion : dans ta pièce jointe, si on ajoutait des exemples de cas pratiques utilisant regexp en plus de ta fonction de test des patterns?

Qu'en penses-tu ?
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal