Ejemplo: "Esto es simplemente una frase simple".
Quiero unir todos los caracteres entre "Esto es" y "oración". Los saltos de línea deben ignorarse. No puedo entender la sintaxis correcta.
Ejemplo: "Esto es simplemente una frase simple".
Quiero unir todos los caracteres entre "Esto es" y "oración". Los saltos de línea deben ignorarse. No puedo entender la sintaxis correcta.
Respuestas:
Por ejemplo
(?<=This is)(.*)(?=sentence)
Utilicé (?<=)
mirar hacia atrás y mirar hacia adelante (?=)
para que "Esto es" y "oración" no se incluyan en el partido, pero esto depende de su caso de uso, también puede simplemente escribir This is(.*)sentence
.
Lo importante aquí es que active el modo "dotall" de su motor regex, de modo que .
coincida con la nueva línea. Pero cómo lo haces depende de tu motor regex.
Lo siguiente es si usa .*
o .*?
. La primera es codiciosa y coincidirá hasta la última "oración" en su cadena, la segunda es perezosa y coincidirá hasta la próxima "oración" en su cadena.
Actualizar
This is(?s)(.*)sentence
Donde (? S) activa el modificador dotall, haciendo que .
coincidan los caracteres de nueva línea.
Actualización 2:
(?<=is \()(.*?)(?=\s*\))
coincide con su ejemplo "Esta es una oración (simple)". Ver aquí en Regexr
This is(?s)(.*)sentence
estaría funcionando?
Resucitar esta pregunta porque la expresión regular en la respuesta aceptada no me parece correcta. ¿Por qué? Porque
(?<=This is)(.*)(?=sentence)
coincidirá my first sentence. This is my second
enThis is my first sentence. This is my second sentence.
Ver demo .
Necesita un cuantificador perezoso entre las dos miradas. Agregar un ?
hace que la estrella sea perezosa.
Esto coincide con lo que quieres:
(?<=This is).*?(?=sentence)
Ver demo . Eliminé el grupo de captura, que no era necesario.
Modo DOTALL para igualar saltos de línea
Tenga en cuenta que en la demostración, el "punto coincide con el modo de salto de línea" (también conocido como) dot-all está configurado (vea cómo activar DOTALL en varios idiomas ). En muchos sabores de (?s)
expresiones regulares, puede configurarlo con el modificador en línea , convirtiendo la expresión en:
(?s)(?<=This is).*?(?=sentence)
Referencia
.*
y .*?
también se explica en mi respuesta (el párrafo anterior a "Actualización"). Entonces no creo que mi respuesta sea incorrecta.
is incorrect
a doesn't seem quite correct to me
... espero que no haga que la contracción nerviosa, probablemente sólo una diferencia de percepción acerca de cuál debe ser la expresión regular para una tal respuesta de alto tráfico.
Probar This is[\s\S]*sentence
, funciona en javascript
[\s\S]*?
(también llamado: comodín no codicioso)
Esta:
This is (.*?) sentence
funciona en javascript.
En caso de que alguien esté buscando un ejemplo de esto dentro del 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)
}
}
}
Simplemente puede usar esto: \This is .*? \sentence
Esto funcionó para mí (estoy usando VS Code ):
para:
This is just\na simple sentence
Utilizar:
This .+ sentence
En texto sublime, simplemente escribe las dos palabras que le interesa mantener, por ejemplo, en su caso, es
"Esto es" y "oración"
y escribes. * en el 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); `
Llegué aquí en mi búsqueda de expresiones regulares para convertir esta sintaxis de impresión entre print "string", en Python2 en scripts antiguos con: print ("string"), para Python3. Funciona bien, de lo contrario use 2to3.py para conversiones adicionales. Aquí está mi solución para los demás:
Pruébelo en Regexr.com (por alguna razón no funciona en NP ++):
find: (?<=print)( ')(.*)(')
replace: ('$2')
para variables:
(?<=print)( )(.*)(\n)
('$2')\n
para etiqueta y variable:
(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n
¿Cómo reemplazar todas las "cadenas" de impresión en Python2 con print ("cadena") para Python3?
RegEx para hacer coincidir todo entre dos cadenas utilizando el enfoque de Java.
List<String> results = new ArrayList<>(); //For storing results
String example = "Code will save the world";
Usemos objetos Pattern y Matcher para usar RegEx (. ?) * .
Pattern p = Pattern.compile("Code "(.*?)" world"); //java.util.regex.Pattern;
Matcher m = p.matcher(example); //java.util.regex.Matcher;
Dado que Matcher puede contener más de una coincidencia, debemos recorrer los resultados y almacenarlos.
while(m.find()){ //Loop through all matches
results.add(m.group()); //Get value and store in collection.
}
Este ejemplo solo contendrá "guardará la palabra " , pero en el texto más grande probablemente encontrará más coincidencias.