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
/[^[\]]+(?=])/gsolo 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 mundofuente