Ejemplo: “Esto es simplemente una sentencia simple”.
Quiero unir cada personaje entre “Esto es” y “oración”. Los saltos de línea deben ignorarse. No puedo descifrar la syntax correcta.
Por ejemplo
(?<=This is)(.*)(?=sentence)
Regexr
Usé lookbehind (?<=)
Y look ahead (?=)
que "This is" y "sentence" no estén incluidos en la coincidencia, pero esto depende de tu caso de uso, también puedes simplemente escribir This is(.*)sentence
Lo importante aquí es que active el modo "dotall" de su motor de expresiones regulares, de modo que .
está coincidiendo con la nueva línea. Pero cómo lo haces depende de tu motor de expresiones regulares.
El siguiente paso es si usa .*
O. .*?
. El primero es codicioso y coincidirá hasta la última "oración" en tu cadena, el segundo es flojo y coincidirá hasta la siguiente "oración" en tu cadena.
Actualizar
Regexr
This is(?s)(.*)sentence
Donde el (?) Enciende el modificador de Dallall, haciendo que el .
haciendo coincidir los caracteres de nueva línea.
Actualización 2:
(?<=is \()(.*?)(?=\s*\))
está coincidiendo con su ejemplo "Esta es una oración (simple)". Ver aquí en Regexr
Resucitando esta pregunta porque la expresión regular en la respuesta aceptada no me parece del todo correcta. ¿Por qué? Porque
(?<=This is)(.*)(?=sentence)
coincidirá con my first sentence. This is my second
my first sentence. This is my second
en This is my first sentence. This is my second sentence.
This is my first sentence. This is my second sentence.
Ver demostración
Necesita un cuantificador perezoso entre las dos alternativas. Agregar un ?
hace que la estrella sea floja.
Esto coincide con lo que quieres:
(?<=This is).*?(?=sentence)
Ver demostración Eliminé el grupo de captura, que no era necesario.
Modo DOTALL para coincidir con los saltos de línea
Tenga en cuenta que en la demostración, el "punto coincide con el modo de salto de línea" (aka) punto-todo está configurado (consulte cómo activar DOTALL en varios idiomas ). En muchos sabores de expresiones regulares, puede configurarlo con el modificador en línea (?s)
, convirtiendo la expresión en:
(?s)(?<=This is).*?(?=sentence)
Referencia
Try This is[\s\S]*sentence
, funciona en javascript
Esta:
This is (.*?) sentence
funciona en javascript.
usa esto: (?<=beginningstringname)(.*\n?)(?=endstringname)
Simplemente puede usar esto: \This is .*? \sentence
\This is .*? \sentence
En caso de que alguien esté buscando un ejemplo de esto dentro de un contexto de Jenkins. Analiza build.log y si encuentra una coincidencia falla la comstackción con la coincidencia.
import java.util.regex.Matcher; import java.util.regex.Pattern; node{ stage("parse"){ def file = readFile 'build.log' def regex = ~"(?s)(firstStringToUse(.*)secondStringToUse)" Matcher match = regex.matcher(file) match.find() { capturedText = match.group(1) error(capturedText) } } }
En texto sublime, simplemente escriba las dos palabras que le interesan, por ejemplo, en su caso, es
“Esto es” y “oración”
y escribes. * entre medio
es decir, This is .* sentence
y esto debería hacerte bien
Así es como lo hice:
Esto fue más fácil para mí que tratar de descubrir la expresión regular específica necesaria.
int indexPictureData = result.IndexOf("-PictureData:"); int indexIdentity = result.IndexOf("-Identity:"); string returnValue = result.Remove(indexPictureData + 13); returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); `
para una búsqueda rápida en VIM, puede usar en el indicador de Vim Control: / This is. * \ _. * sentence