2 votes

Regex pour détecter les lettres et chiffres minuscules qui précèdent et qui suivent.

J'essaie de trouver un modèle particulier dans mes chaînes de caractères et mes connaissances en matière de regex sont assez basiques. Pour trouver des lettres minuscules, je peux utiliser [a-z0-9]+ mais comment faire pour trouver les personnages précédents et suivants ?

Exemples autorisés : (A) , AB , ABC , [ABC] , .AB' , @ABCD# . En substance, seuls les caractères majuscules (quelle que soit leur longueur), ou les caractères majuscules (quelle que soit leur longueur) précédés ou suivis ou les deux (avant et arrière), sont des caractères spéciaux.
Non autorisé : abABCaa , ABCaa , aaAB , 123ABC , 12ABGGabc , aaBaa etc. Il s'agit essentiellement de lettres majuscules (de n'importe quelle longueur) précédées ou suivies, ou les deux, d'alphabets ou de chiffres.

Comment puis-je écrire une expression rationnelle qui filtre soit les exemples autorisés, soit les exemples non autorisés ? J'espère que je suis clair

4voto

Sednus Points 1467

Cela correspondra à 3 groupes : la majuscule correspondante, les caractères qui la précèdent et les caractères qui la suivent. Si les groupes ne sont pas souhaités, il suffit de supprimer les parenthèses.

([^a-z0-9]*)([A-Z]+)([^a-z0-9]*)

Pour plus d'informations sur l'appariement et le regroupement, veuillez vous référer au document suivant Javadoc . Aussi, une suggestion pour test de regex en ligne

1voto

M42 Points 31888

Que diriez-vous d'être simple :

\b[A-Z]+\b

Cela correspondra aux lettres majuscules entourées d'autres caractères que le caractère du mot.

1voto

Tim Pietzcker Points 146308

C'est beaucoup plus simple. Il suffit de vérifier s'il y a une correspondance avec :

"^\\p{P}*[A-Z]+\\p{P}*$"

\p{P} correspond à tout caractère de ponctuation.

^ y $ peut être abandonné si vous utilisez le .matches() méthode.

Donc cela correspond AAB , #A , A. et échoue 1A , aAa , aA y Aa .

-1voto

MirrorMirror Points 223

Je ne suis pas sûr que cela puisse être fait avec regex. Essayez de le faire de manière algorithmique en comparant :

  • boucle de démarrage tous les caractères de la chaîne (caractères alpha) :

    CurCharIsUpper = (curchar.uppercase == curchar.lower) ? false : true ; si (PrevCharIsUpper == CurCharIsUpper) blablabla ; PrevCharIsUpper = CurCharIsUpper ;

  • terminer la boucle

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