2011-06-15 11 views
5

Seamos honestos, estoy luchando con la expresión regular que necesito para extraer partes de la secuencia de caracteres. La secuencia contiene pares de pares de clave y valor encerrados con el carácter /. Entonces el par podría ser /KEY/VALUE/, pero también /KEY/VAL/UE/. Los pares se sientan uno al lado del otro en la secuencia. mirada¿Cómo extraer los pares de valores clave mediante la expresión regular?

Vamos a la secuencia de ejemplo:

/ABCD/value1//ECFG/value2//HIJK/value3a/value3b/

Lo que me gustaría ser capaz de hacer es obtener la lista de los pares de valores clave como esto:

ABCD -> value1

ECFG -> value2

HIJK -> value3a/value3b

+0

qué idioma desea ejecutar esto en? – Bohemian

+0

Estoy usando Java, 'java.util.regex. *' Para ser más específico. –

Respuesta

5

Esto debería funcionar:

/(.+?)/(.+?)/(?=/|$) 

La primera paren capturará la clave, el segundo el valor. La búsqueda anticipada coincide con un 2º /, que indica un nuevo par clave/valor o el final de cadena para el último par clave/valor.

Editar: Aquí algo de código Python:

s = "/ABCD/value1//ECFG/value2//HIJK/value3a/value3b/" 
re.findall('/(.+?)/(.+?)/(?=/|$)', s) 
# [('ABCD', 'value1'), ('ECFG', 'value2'), ('HIJK', 'value3a/value3b')] 
+0

Perfecto, funcionó como un encanto. Gracias por una ayuda rápida! –

1

Prueba esto: /(.*?)/(.*?)/

Así es como se usaría con sed:

sed -e 's,/(.*?)/(.*?)/,$1 --> $2\n,g' inputfile.txt 

La clave está en partidos no codiciosos .*? (en lugar de codiciosos .*)

Cuestiones relacionadas