2 votes

Limiter le nombre de mots à l'aide d'une expression régulière

L'expression régulière que vous avez donnée : ^(?:\b\w+\b[\s\r\n]*){1,250}$ pour limiter à 250 mots sur plusieurs lignes fonctionne s'il ne contient pas de caractères spéciaux.

Que dois-je faire si je dois rechercher un certain nombre de mots contenant des caractères spéciaux ? Quelque chose comme cet exemple :

--> Hi! i need help with regular expression, please help me. <--

6voto

Justin Ludwig Points 912

L'approche la plus simple consiste à regrouper les caractères des mots et à limiter ces groupes à une fourchette spécifique (1 à 250) :

^\W*(\w+(\W+|$)){1,250}$

3voto

hashable Points 1781

Je ne suis pas familier avec le langage C#, je vais donc décrire l'expression rationnelle.

Méthode 1 :

C'est ce que vous recherchez essentiellement :

(\b[^\s]+\b){1,250}

En java :

\s est n'importe quel caractère d'espacement.

[^\s]+ est une séquence de caractères sans espace.

\b est une limite de mot.

Vous pouvez traduire l'expression rationnelle en C#.

Méthode 2 :

Tokeniser le texte d'entrée en mots délimités par des espaces blancs. En Java, cette opération est réalisée par :

String[] tokens = inputString.split("\\s+");

où l'expression rationnelle est \s+

Vous pouvez maintenant compter la longueur du tableau et mettre en œuvre votre logique pour rejeter les mots au-delà de 250.

Méthode 3 :

Définir un modèle pour capturer les espaces blancs en tant que "groupe de capture".

(\s+)

Vous pouvez maintenant compter le nombre de correspondances dans votre outil de recherche de motifs à l'aide d'une boucle while. C'est essentiellement la même chose que la méthode 2, mais sans la création d'un tableau de jetons.

1voto

MichaelD Points 1394

Il est un peu tard pour répondre, mais aucune des solutions proposées ici n'a fonctionné :

^([a-zA-Z0-9]+[^a-zA-Z0-9]*){1,8}$

où {1,8} définit le nombre de mots souhaités

0voto

Lucas Jones Points 11741

Vous pouvez utiliser le {a,b} sur n'importe quelle expression, comme suit :

.{1,256}
[\d\w_?]{1,567}
(0x)?[0-9A-F]{1,}

Ainsi, dans votre cas, vous pourriez utiliser :

^(?:\b\w+\b[_!?\s\r\n]*){1,250}$

Où le _!? peuvent être des caractères spéciaux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X