2011-02-18 14 views
6

necesito una expresión regular para que coincida con una serie de uno o más números de n dígitos, separados por comas, es decir:Necesita expresión regular para que coincida con 1 o más de los números de exactamente n dígitos

abc12345def devuelve 12345
abc12345, 23456def vuelve 12345,23456

hasta ahora tengo este: \d{5}(,\d{5})*

problema es que coincide también en casos como estos:

123456 12345 rendimientos, pero necesito que no coincide si º número e es mayor que 5. Por lo tanto, necesitan números de exactamente 5 dígitos, y si un número es más corto o más largo que es un no-match

Gracias

Respuesta

5

qué idioma está usando para sus expresiones regulares? Desea colocar marcadores que no sean dígitos alrededor de su \d{5}; Ésta es la sintaxis de Perl (con una solución negativa de preanálisis/mirada detrás de Lukasz):

(?<![\d,])\d{5}(,\d{5})*(?![\d,]) 
+0

De hecho, creo que lo tengo! "(? Lukasz

+0

Esto funciona para mí, capturando las 'coincidencias parciales' que la mía no hizo (ejemplo: 'abc12345,12345,123xyz') –

+0

@Colin O'Dell: No se supone que coincida con esos casos, pero no estoy Seguro que está especificado. Cuando lo prueba contra su entrada, supongo que obtiene '12345,12345' como la parte correspondiente, ¿verdad? Es posible que la coma tenga que estar en la búsqueda anticipada y en las afirmaciones subyacentes, así como en los dígitos. –

3

De hecho, creo que lo tengo! (?<!\d)\d{5}(?!\d)(,(?<!\d)\d{5}(?!\d))*

he utilizado la visión hacia adelante y mirar detrás

Gracias.

0

Se puede usar éste:

/\D?\d{5}(?:,\d{5})?\D?/ 

explicación:

/ : regex delimiter 
\D? : non digit optionnal 
\d{5} : 5 digits 
(?: : begining of non-capture group 
,\d{5} : comma and 5 digits 
)? : end of group optionnal 
\D? : non digit optionnal 
/ : regex delimiter 
Cuestiones relacionadas