He estado tratando de encontrar la forma de extraer una parte de una cadena entre dos caracteres especiales y “he estado buscando expresiones regulares, pero francamente no puedo entenderlo”.
Ejemplo en código Java:
String str="21*90'89\"";
Me gustaría sacar 89
En general, me gustaría saber cómo extraer parte de una cadena entre dos caracteres específicos, por favor.
También sería bueno saber cómo extraer parte de la cadena desde el principio hasta un personaje específico como obtener 21.
Prueba esta expresión regular:
'(.*?)"
Como un literal de cadena de Java, tendrá que escribirlo de la siguiente manera:
"'(.*?)\""
Aquí hay un ejemplo más completo que demuestra cómo usar esta expresión regular con un Matcher
:
Pattern pattern = Pattern.compile("'(.*?)\""); Matcher matcher = pattern.matcher(str); if (matcher.find()) { System.out.println(matcher.group(1)); }
Véalo trabajar en línea: ideone
Si siempre tendrá una cadena como esa (con 3 partes), entonces esto es suficiente:
String str= "21*90'89\""; String between = str.split("\"|'")[1];
Otra opción, si puede asegurar que sus cadenas siempre estarán en el formato que proporciona, puede usar una solución subserie / indexOf rápida y sucia:
str.substring(str.indexOf("'") + 1, str.indexOf("\""));
Y para obtener la segunda información que solicitó:
str.substring(0, str.indexOf("*"));
public static void main(final String[] args) { final String str = "21*90'89\""; final Pattern pattern = Pattern.compile("[\\*'\"]"); final String[] result = pattern.split(str); System.out.println(Arrays.toString(result)); }
Es lo que estás buscando … El progtwig descrito anteriormente produce:
[21, 90, 89]
Me falta la solución más simple posible aquí:
str.replaceFirst(".*'(.*)\".*", "$1");
Esta solución es con mucho la más corta, sin embargo tiene algunos inconvenientes:
No lo usaría excepto como un hack rápido o si podría estar realmente seguro sobre el formato de entrada.
String str="abc#defg@lmn!tp?pqr*tsd"; String special="!?@#$%^&*()/<>{}[]:;'`~"; ArrayList al=new ArrayList (); for(int i=0;i
String str= 21*90'89; String part= str.split("[*|']"); System.out.println(part[0] +""+part[1]);