2010-03-05 5 views
10

¿Cómo uso la aserción de búsqueda anticipada para determinar si existe un cierto carácter como mucho un cierto número de veces en una cadena?Regex: utilizando la aserción de búsqueda anticipada para verificar si el carácter existe a lo sumo un determinado número de veces

Por ejemplo, supongamos que quiero verificar una cadena que tenga al menos un carácter para asegurarse de que contiene "@" como máximo 2 veces. Gracias por adelantado. Usando Python si eso importa.

Respuesta

5

Hay un montón de maneras de hacer esto, por ejemplo:

/^(?=([^@]*@){,2}[^@]*$)./ 
+0

Muy bien optimizado también .. – gnarf

+0

¡Gracias! ¿Cómo difiere su respuesta de esto: (? = [^ @] * [@] {, 2} [^ @] * $) – teggy

+1

@teggy: en su versión, el cuantificador '{, 2}' se aplica solo al inmediatamente anterior al átomo, '[@]', por lo que coincidirá con 'xx @@ xx' pero no con' xx @ xx @ xx'. –

0

Uso de una aseveración búsqueda negativa hacia delante, puede asegurarse de que no se produce @ tres veces:

(?!.*@.*@.*@.*).* 
0

I cree que la respuesta de Mark no funcionará, ya que es necesario excluir el @ para que no coincida en otros momentos. Prueba esto:

^(?=(([^@]*@){0,2}[^@]*$))

Editar: marca fija su respuesta, la nuestra debe ser el mismo ahora. Además, arreglado.

+0

Su lookahead debe anclarse como el de Mark. –

+0

no funciona. Estoy usando JavaScript. text = 'aa @@'; regex =/^ (? = (([^ @] * @) {, 2} [^ @] * $))/ console.log (text.match (regex)); –

Cuestiones relacionadas