java - matches - Cómo extraer una subcadena usando regex
replaceall java regex (10)
Debido a que también seleccionó Scala, una solución sin expresiones regulares que trata fácilmente con varias cadenas citadas:
val text = "some string with ''the data i want'' inside ''and even more data''"
text.split("''").zipWithIndex.filter(_._2 % 2 != 0).map(_._1)
res: Array[java.lang.String] = Array(the data i want, and even more data)
Tengo una cadena que tiene dos comillas simples, el carácter ''
. Entre las comillas simples están los datos que quiero.
¿Cómo puedo escribir una expresión regular para extraer "los datos que quiero" del siguiente texto?
mydata = "some string with ''the data i want'' inside";
En Scala,
val ticks = "''([^'']*)''".r
ticks findFirstIn mydata match {
case Some(ticks(inside)) => println(inside)
case _ => println("nothing")
}
for (ticks(inside) <- ticks findAllIn mydata) println(inside) // multiple matches
val Some(ticks(inside)) = ticks findFirstIn mydata // may throw exception
val ticks = ".*''([^'']*)''.*".r
val ticks(inside) = mydata // safe, shorter, only gets the first set of ticks
Estoy de acuerdo con la respuesta anterior por Mihai Toader funciona como un encanto. Solo una pequeña modificación a la misma basada en las actualizaciones.
let string = "fact-tab-1 extra stuff you dont care about"
let matchResult = string.match(/fact-tab-./);
console.log(matchResult)
console.log(''The extracted part would be : '' + matchResult[0])
document.getElementById(''result'').innerHTML = ''The extracted part would be : '' + matchResult[0];
<div id="result">
</div>
Ejemplo de ejecución: JSFiddle
Hay una sola frase para esto:
String target = myData.replaceAll("[^'']*(?:''(.*?)'')?.*", "$1");
Al hacer que el grupo coincidente sea opcional, esto también satisface las cotizaciones que no se encuentran al devolver un espacio en blanco en ese caso.
Ver demostración en vivo .
No necesitas expresiones regulares para esto.
Agregue apache commons lang a su proyecto ( http://commons.apache.org/proper/commons-lang/ ), luego use:
String dataYouWant = StringUtils.substringBetween(mydata, "''");
Suponiendo que desea la parte entre comillas simples, use esta expresión regular con un Matcher
:
"''(.*?)''"
Ejemplo:
String mydata = "some string with ''the data i want'' inside";
Pattern pattern = Pattern.compile("''(.*?)''");
Matcher matcher = pattern.matcher(mydata);
if (matcher.find())
{
System.out.println(matcher.group(1));
}
Resultado:
the data i want
como en javascript:
mydata.match(/''([^'']+)''/)[1]
la expresión regular real es: /''([^'']+)''/
si usas el modificador no codicioso (como en otra publicación) es así:
mydata.match(/''(.*?)''/)[1]
es mas limpio
String dataIWant = mydata.split("''")[1];
String dataIWant = mydata.replaceFirst(".*''(.*?)''.*", "$1");
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
Pattern pattern = Pattern.compile(".*''([^'']*)''.*");
String mydata = "some string with ''the data i want'' inside";
Matcher matcher = pattern.matcher(mydata);
if(matcher.matches()) {
System.out.println(matcher.group(1));
}
}
}