Regex
Résolu
Chihaya
Messages postés
144
Date d'inscription
Statut
Membre
Dernière intervention
-
Nexii Messages postés 338 Date d'inscription Statut Membre Dernière intervention -
Nexii Messages postés 338 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je cherche a créer une expression régulière me permettant de vérifier le contenue d'un fichier.
Ce fichier contient 50 'mots' séparés par des espaces qui sont soit 'n' soit un nombre.
le nombre peut être négatif, et contient entre 1 et 8 chiffres.
Exemple de fichier :
n ... n n n -16711681 n n n n n n n n n n -16711681 -16711936 -16711936 -16711936 n ... n
J'ai pour l'instant ceci :
([n]|\ |\-?\d{1,8})
Qui lit soit 'n', soit un espace, soit un nombre de 1-8 chiffres positif ou négatif.
Cependant je n'arrive pas à faire en sorte de vérifier que le texte comprend exactement 50 mots.
J'utilise le site https://regexr.com/ pour tester mon expression.
Savez-vous comment faire?
Merci
je cherche a créer une expression régulière me permettant de vérifier le contenue d'un fichier.
Ce fichier contient 50 'mots' séparés par des espaces qui sont soit 'n' soit un nombre.
le nombre peut être négatif, et contient entre 1 et 8 chiffres.
Exemple de fichier :
n ... n n n -16711681 n n n n n n n n n n -16711681 -16711936 -16711936 -16711936 n ... n
J'ai pour l'instant ceci :
([n]|\ |\-?\d{1,8})
Qui lit soit 'n', soit un espace, soit un nombre de 1-8 chiffres positif ou négatif.
Cependant je n'arrive pas à faire en sorte de vérifier que le texte comprend exactement 50 mots.
J'utilise le site https://regexr.com/ pour tester mon expression.
Savez-vous comment faire?
Merci
A voir également:
- Regex
- Regex buddy - Télécharger - Édition & Programmation
- Regex tout sauf - Forum Java
- Regex ne commence pas par ✓ - Forum Programmation
- Regex pour evitez la répétition des caractères - Forum PHP
- Regex mot de passe ✓ - Forum Framework .NET
3 réponses
Salut,
Déjà, ton expression prend le groupe (lettre ou chiffe + espace) est-ce bien ce que tu souhaite ?
Qu'est ce qu'un mot : une lettre, un chiffre, un espace sont 3 mots différents ou une lettre et un espace forment un seul mot ? Dans ce dernier cas, souhaites-tu catcher les espaces ?
Enfin, pour les 50 mots il suffirait d'un compteur qui s'incrémente dès que tu catche un espace, ou alors tu utilise le "split" sur les espaces pour obtenir un tableau de mot et suffit de faire .length dessus.
Déjà, ton expression prend le groupe (lettre ou chiffe + espace) est-ce bien ce que tu souhaite ?
Qu'est ce qu'un mot : une lettre, un chiffre, un espace sont 3 mots différents ou une lettre et un espace forment un seul mot ? Dans ce dernier cas, souhaites-tu catcher les espaces ?
Enfin, pour les 50 mots il suffirait d'un compteur qui s'incrémente dès que tu catche un espace, ou alors tu utilise le "split" sur les espaces pour obtenir un tableau de mot et suffit de faire .length dessus.
public static void main(String[] args) { String fichier = "n -1600005 16005 n n n 160000 k"; Pattern p = Pattern.compile("([n]|\\-?\\d{1,8})"); Matcher m = p.matcher(fichier); int nb = 0; while (m.find()) { nb += m.groupCount(); } System.out.print("nb = " + nb); }
Sortie console : nb = 7;
Attention, j'ai retiré les espaces de ton expression pour éviter qu'il ne les compte.
En gros mon fichier contient des mots séparés par des espaces. Un mot est soit la lettre n, soit un nombre.
J'aimerai vérifier que mon texte est bien de ce format, c'est a dire qu'il possède 50 mots de type n/nombre.
du coup j'ai réfléchi un peu depuis, et j'ai obtenu ça :
([n\ ]|\-?\d{1,8}\ ){50}
Le problème est que si j'entre cette regex et mon fichier dans le site que j'ai fourni, elle ne lit pas la totalité de la chaine.
(n\s|\-?\d{1,8}\s)
vu que je suis en java, j'ai fait :
Il me suffit à la fin de vérifier cpt pour voir combien de mots ont été trouver.
Problème résolu donc !