Cherche regex spécifique

Cherche regex spécifique - Python - Programmation

Marsh Posté le 21-11-2019 à 09:50:15    

Bonjour,
 
 
je suis à la recherche d'une regex qui matcherait les chaines de caractères contenant au moins:
 
3 caractères alphabetiques, un chiffre (>=1, mais pas que des 0) et un espace.
 
ex: "rue du pont,6" doit matcher
ex: "rue du pont 0" ou "rue du pont 00" ne doit pas matcher
 
J'en ai déjà testé plusieurs dont un qui fonctionne très bien en Java mais pas avec ma version de python (3.7 sous windows)  :cry: :
 
(je trouve fou que les regex ne soient pa compatibles d'un language à un autre, ou alors je m'y prend mal)  
 
 
 

Code :
  1. regex= "(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]+"
  2.             match = re.match(regex, valueToTest)
  3.          
  4.             if match != None:
  5.              
  6.                 value_is_valid= True


 
Merci bcp pour votre aide


Message édité par tompouss le 21-11-2019 à 09:54:52

---------------
collectionneur de pâtes thermiques
Reply

Marsh Posté le 21-11-2019 à 09:50:15   

Reply

Marsh Posté le 21-11-2019 à 15:01:50    

Bonjour,

 

J'ai un truc un peu dégueu :

Code :
  1. (?=[1-9][0-9]*).*(?=[\w ]{3,}(?= ))|(?=[\w ]{3,}(?= )).*(?=[1-9][0-9]*)
 

edit : petite correction.


Message édité par MaybeEijOrNot le 21-11-2019 à 17:28:35

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 21-11-2019 à 16:49:38    

j'ai pas testé en python mais j'aurai dit :  
 

Code :
  1. regex= "\D{3,}\d "


 
EDIT : ah un peu trop simple j'ai oublié que ça doit être un chiffre positif
 
 

Code :
  1. regex = "\D{3,}[1-9]\d* "


 
 
et après si c'est trop violent le \D on peut préciser un ensemble de caractère qu'on autorise et qu'on en veut 3, ensuite des caractères qu'on s'en fou puis un chiffre entre 1 et 9 suivi d'un nombre quelconque et d'un espace  
 

Code :
  1. [a-zA-Z]{3,}.*[1-9]\d*


Message édité par mathieuu le 21-11-2019 à 17:01:53
Reply

Marsh Posté le 21-11-2019 à 17:40:53    

Pour une adresse, cela me semble pas mal :
 

Code :
  1. ([1-9][0-9]*)?(?(1).*[a-zA-Z]{3,}(?= )|[a-zA-Z]{3,}(?= ).*[1-9][0-9]*)


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 25-11-2019 à 07:07:53    

Pour la regex je vous laisse vous amuser, mais je tiens juste à signaler que foutre des masques de validation stricts sur un truc aussi variable qu'une adresse c'est un très bon moyen d'avoir des emmerdes :o

 

Et dans ton exemple t'es pas clair, en plus des 0 y a une virgule qui disparait en chemin.

 

Pour l'histoire de la compatibilité il y a plusieurs normes de regex : ecmascript (=javascript, donc fréquent dans les exemples du web), perl (="pcre" ), posix... Les langages pas trop cons proposent de spécifier le type de regex à utiliser lorsque tu les déclares.
Et après y a des variantes dans les variantes (genre pour introduire dans certains langages des trucs en plus)
Bon courage, c'est un cauchemar à maitriser vraiment :o

 

edit : quelques unes des nuances dans le cas de .Net par exemple qui permet de spécifier le type : https://docs.microsoft.com/en-us/do [...] g-behavior


Message édité par TotalRecall le 25-11-2019 à 07:21:41

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 25-11-2019 à 09:23:45    

Il n'est pas très strict pour le coup, il demande juste qu'il y ait au moins plus de 3 lettres consécutives et un numéro de voie.
Néanmoins, pas certain que le numéro de voie soit obligatoire dans tous les cas, notamment avec les boîtes postales (mais bon là on a un nombre qui fait que ça passe).


Message édité par MaybeEijOrNot le 25-11-2019 à 09:24:04

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed