2017-03-06 4 views
-1

J'ai quelques chaînes alphanumériques. A partir de ce que je dois savoir les chaînes qui satisfont à la condition suivante,expression régulière pour obtenir l'occation unique d'un caractère d'une chaîne

  1. Il devrait y avoir qu'un seul caractère dans la chaîne entière et qui devrait être « e »
  2. « e » ne doit pas présenter au début ou la fin de la chaîne, il devrait être présent au milieu.

Je veux choisir des chaînes comme 43e4234,435345e5

je peux faire la même chose en rubis, mais comme j'ai grand nombre de chaînes que je veux aller avec l'expression régulière ne

+2

Cela semble être un simple '/ \ A \ d + e \ d + \ z /' devrait suffire. –

+0

Cela n'a aucun sens. S'il n'y a qu'un seul caractère dans la chaîne entière, alors 'e' doit être présent au début et à la fin. Si * n'est pas * présent au début ou à la fin, il doit y avoir un caractère * autre *, puis il y a au moins * deux * caractères dans la chaîne. Vos exigences sont contradictoires: il est impossible d'avoir une chaîne composée d'un seul caractère mais composée de plus d'un caractère. Les exemples que vous avez publiés violent la contrainte # 1, puisqu'ils contiennent les caractères '2',' 3', '4' et' 5' en plus de 'e'. –

+0

'2,3,4,5' je traite comme des chiffres –

Répondre

1

Cela devrait fonctionner:

/\A[^a-z]+e[^a-z]+\z/i 

Cela signifie:

  • Début de la chaîne
  • au moins un non-lettre
  • 'e'
  • au moins un non-lettre
  • fin de la chaîne

Voici un exemple: https://regex101.com/r/H9oza7/1

Utilisez /^[^a-z]+e[^a-z]+$/im si vous souhaitez faire correspondre des lignes dans une chaîne.