online - regex python
Regex Une todos los personajes entre dos cadenas (10)
Texto sublime 3x
En texto sublime, simplemente escribe las dos palabras que te interesa mantener, por ejemplo, en tu caso es
"Esto es" y "oración"
y tu escribes. * en medio
es decir, This is .* sentence
y esto debería hacerte bien
Ejemplo: "Esto es solo / na oración simple".
Quiero hacer coincidir todos los caracteres entre "Esto es" y "oración". Los saltos de línea deben ser ignorados. No puedo entender la sintaxis correcta.
Se necesita cuantificador perezoso
Resucitar 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 demo .
Necesitas un cuantificador perezoso entre los dos lookarounds. Añadiendo un ?
hace la estrella perezosa.
Esto coincide con lo que quieres:
(?<=This is).*?(?=sentence)
Ver demo . Quité el grupo de captura, que no era necesario.
Modo DOTALL para que coincida con saltos de línea
Tenga en cuenta que en la demostración el "punto coincide con el modo de saltos de línea" (aka) dot-all está configurado (vea cómo activar DOTALL en varios idiomas ). En muchos sabores de expresiones regulares, puede configurarlo con los modificadores en línea (?s)
, convirtiendo la expresión en:
(?s)(?<=This is).*?(?=sentence)
Referencia
Así es como lo hice:
Esto fue más fácil para mí que tratar de averiguar la expresión regular necesaria.
int indexPictureData = result.IndexOf("-PictureData:");
int indexIdentity = result.IndexOf("-Identity:");
string returnValue = result.Remove(indexPictureData + 13);
returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); `
En caso de que alguien esté buscando un ejemplo de esto dentro de un contexto de Jenkins. Analiza el build.log y si encuentra una coincidencia, falla la compilació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)
}
}
}
Esta:
This is (.*?) sentence
Funciona en javascript.
Por ejemplo
(?<=This is)(.*)(?=sentence)
Usé lookbehind (?<=)
Y miré hacia adelante (?=)
que "Esto es" y "oración" no se incluyan en la coincidencia, pero esto depende de su caso de uso, también puede escribir This is(.*)sentence
.
Lo importante aquí es que active el modo "dotall" de su motor de expresiones regulares, para que el .
está emparejando la nueva línea. Pero cómo haces esto depende de tu motor de expresiones regulares.
Lo siguiente es si usas .*
O. .*?
. La primera es codiciosa y coincidirá hasta la última "oración" en su cadena, la segunda es perezosa y coincidirá con la siguiente "oración" en su cadena.
Actualizar
This is(?s)(.*)sentence
Donde el (? S) enciende el modificador dotall, haciendo el .
haciendo coincidir los caracteres de nueva línea.
Actualización 2:
(?<=is /()(.*?)(?=/s*/))
coincide con su ejemplo "Esta es una oración (simple)". Vea aquí en Regexr
Probar This is[/s/S]*sentence
, funciona en javascript
Puede simplemente usar esto: /This is .*? /sentence
/This is .*? /sentence
para una búsqueda rápida en VIM, puede usar en el indicador de Vim Control: / Esto es. * / _. * frase
use esto: (?<=beginningstringname)(.*/n?)(?=endstringname)