Necesito extraer de una cadena un conjunto de caracteres que se incluyen entre dos delimitadores, sin devolver los delimitadores.
Un simple ejemplo debería ser útil:
Objetivo : extraer la subcadena entre corchetes, sin devolver los corchetes.
Cadena base :This is a test string [more or less]
Si uso el siguiente reg. ex.
\ [. *? \]
El partido es [more or less]
. Necesito obtener solo more or less
(sin los corchetes).
¿Es posible hacer lo?
Respuestas:
Fácil hecho:
Técnicamente eso es usar lookaheads y lookbehinds. Vea las afirmaciones Lookahead y Lookbehind Zero-Width . El patrón consiste en:
Alternativamente, puede capturar lo que está entre corchetes:
y devolver el primer grupo capturado en lugar de la partida completa.
fuente
This is a test string [more [or] less]
volvería estomore [or] less
?Si está utilizando JavaScript , la primera solución provista por cletus
(?<=\[)(.*?)(?=\])
no funcionará porque JavaScript no admite el operador retrospectivo.Sin embargo, la segunda solución funciona bien, pero necesita obtener el segundo elemento coincidente.
Ejemplo:
Regresará:
Entonces, lo que necesita es el segundo valor. Utilizar:
Regresar:
fuente
Solo necesita 'capturar' el bit entre paréntesis.
Para capturarlo, póngalo entre paréntesis. No dices qué idioma está usando. En Perl, por ejemplo, accedería a esto utilizando la variable $ 1.
Otros idiomas tendrán diferentes mecanismos. C #, por ejemplo, usa la clase de colección Match , creo.
fuente
[^\[]
Empareja cualquier personaje que no sea [.+
Empareja 1 o más de lo que no es[
. Crea grupos de estos partidos.(?=\])
Positiva anticipada]
. Coincide con un grupo que termina]
sin incluirlo en el resultado.Hecho.
Prueba.
http://regexr.com/3gobr
Similar a la solución propuesta por nulo. Pero el adicional
\]
no es obligatorio. Como nota adicional, parece\
que no es necesario escapar[
después de^
. Para facilitar la lectura, lo dejaría en.No funciona en la situación en que los delimitadores son idénticos.
"more or less"
por ejemplo.fuente
PHP:
fuente
Para eliminar también el uso de []:
fuente
Tuve el mismo problema usando regex con bash scripting. Usé una solución de 2 pasos usando tuberías con grep -o aplicando
primero luego
Obviamente no es tan eficiente en las otras respuestas, sino una alternativa.
fuente
Este funciona específicamente para el analizador de expresiones regulares de javascript
/[^[\]]+(?=])/g
solo ejecuta esto en la consola
fuente
Quería encontrar una cadena entre / y #, pero # a veces es opcional. Aquí está la expresión regular que uso:
fuente
Así es como llegué sin '[' y ']' en C #:
El resultado es:
fuente
Si necesita extraer el texto sin los corchetes, puede usar bash awk
echo " [hola mundo] " | awk -F'[][]' '{print $2}'
resultado:
hola mundo
fuente