2011-01-28 16 views

Respuesta

21

Si su lenguaje regex es compatible con Perl: \d{15}.

Es difícil decir cómo manejar los bordes (para que no se agarren accidentalmente dígitos adicionales) sin conocer el contexto externo en el que se utilizará este fragmento. La solución independiente del contexto definitiva es la siguiente:

(?:(?<!\d)\d{15}(?!\d)) 

Usted puede poner esto en medio de cualquier expresión regular, y coincidirá con (y único partido) una secuencia de exactamente 15 dígitos. Sin embargo, es bastante incómodo y generalmente innecesario. Una versión más simple que asume límites que no sean alfanuméricos (por ejemplo, espacio en blanco alrededor de los dígitos) es la siguiente:

(?:\b\d{15}\b) 

Pero no va a funcionar si las letras preceden inmediatamente acompañadas de la secuencia.

En los dos casos anteriores, el (?: externo ... ) es solo una construcción de horquillado para evitar problemas de precedencia con la expresión regular circundante. Si se requiere también depende del contexto.

+0

Uso de una biblioteca de expresiones regulares de python incorporada. – MrGlass

+0

Esto funcionará, entonces. –

27

lo general, puede hacer rangos como sigue:

\d{4,7} 

que significa un mínimo de 4 y un máximo de 7 dígitos. Para su caso particular, puede usar la variante de un argumento, \d{15}.

Ambas formas se admiten en Python's regular expressions - busque el texto {m,n} en ese enlace.

Y tenga en cuenta que \d{15} coincidirá con quince dígitos en cualquier lugar de la línea, incluido un número de 400 dígitos. Si desea asegurarse de que sólo tiene los quince, se utiliza algo como:

^\d{15}$ 

que utiliza los anclajes de inicio y fin, o

^\D*\d{15}\D*$ 

que permite que los no-dígitos arbitrarios a cada lado.

+0

No importa, probé incorrectamente – MrGlass

+2

Si quieres exactamente 15, deberás anclar: busca '^ \ d {15} $' por ejemplo, lo que garantiza que no haya nada en ninguno de los lados; solo aceptará una cadena exactamente 15 caracteres largos con todos los caracteres siendo dígitos. – paxdiablo

+0

Sí, ese fue mi problema: olvidé anclar mis pruebas. – MrGlass

0

Allí, hay dos maneras que tengo, para limitar los números.

usando len,

num = 1234 
len(str(num)) <= 4 

Esta salida será Verdadero/Falso.

usando expresión regular,

import re 
num = 12324 
re.match(r'(?:(?<!\d)\d{4}(?!\d))', str(num)) 

la salida será objeto de expresión regular o Ninguno.

Cuestiones relacionadas