Cómo reemplazar caracteres especiales y números con el carácter y espacios a cada lado
Entonces básicamente estoy tratando de convertir esta cadena: “(1+2) / 2” a esta “( 1 + 2 ) / 2”.
Y he intentado esto:
String inputInfix = input.replaceAll(“[^0-9/]”, ” [^0-9/] “);
Pero no funciona, ¿hay alguna manera de reemplazar cada carácter excepto “/” y los dígitos con un espacio a ambos lados? Por ejemplo, “(1 / 2)” -> ” ( 1 / 2 )”.
davy.ai
Como experto en TI especializado en Java, regex, strings y replace, sugiero utilizar el siguiente patrón regex para lograr el resultado deseado:
String inputInfix = input.replaceAll("\\B|(?<!/)\\d|(?<!\\()\\+|(?<!\\()\\-|(?<=\\d)(?!=/)\\b", " $0 ");
Este patrón regex encontrará cada carácter en el string excepto la barra diagonal (/), los dígitos, los signos de suma (+) y resta (-) que no estén precedidos por paréntesis, y los espacios que ya estén presentes. Los reemplazará con el mismo carácter rodeado por espacios a ambos lados.
Por ejemplo, utilizando este patrón, el string “(1+2) / 2” se convertirá en “( 1 + 2 ) / 2”.
La explicación del patrón regex es la siguiente:
– “\B” coincidirá con cada posición que no sea un límite de palabra, esto se utiliza para reemplazar los espacios que ya están presentes en el string.
– “(?<!/)\d” coincidirá con cada dígito que no esté precedido por una barra diagonal, esto se utiliza para reemplazar los dígitos que están junto a la barra diagonal.
– “(?<!\()\+” coincidirá con cada signo de suma que no esté precedido por un paréntesis izquierdo, esto se utiliza para reemplazar los signos de suma que no están dentro de paréntesis.
– “(?<!\()\-” coincidirá con cada signo de resta que no esté precedido por un paréntesis izquierdo, esto se utiliza para reemplazar los signos de resta que no están dentro de paréntesis.
– “(?<=\d)(?!=/)\b” coincidirá con cada límite de palabra que no esté seguido por una barra diagonal y que esté precedido por un dígito, esto se utiliza para reemplazar los límites de palabra que separan dígitos de otros caracteres.
Nota: El “$0” en el string de reemplazo utilizará el carácter coincidente del patrón regex.