number matches java regex string text-extraction

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 .



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.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)); } } }