Java正则表达式 - 将"x ^ 2"替换为"x²"而不是"x ^ 27"替换为"x²7"

tri*_*420 3 java regex replace match

我得到了一个方程式的字符串,我想用"x²"替换所有出现的方案"x ^ 2".

我的代码:

String equation = "x^2";
equation = equation.replace("^2", "\u00B2");  // u00b2 is unicode for '²'

System.out.println(equation);
Run Code Online (Sandbox Code Playgroud)

这适用于"x ^ 2",但例如"x ^ 25"我得到字符串"x²5",但在这种情况下我希望它保持相同的"x ^ 25".

另一个例子:

"x ^ 2 + 6x" - >"x²+ 6x"// ... x平方

"x ^ 28 + 6x" - >"x ^ 28 + 6x"// ... x为28的幂

谢谢!

编辑:"Mshnik"的解决方案非常完美,即使使用"y ^ 2"而非"x ^ 2"等自定义字符,谢谢!

Msh*_*nik 5

这里有一个正则表达式将匹配2x^2中,2a^2+...而不是2x^20:

(?<=\w)\^2(?![0-9.])
Run Code Online (Sandbox Code Playgroud)

特别:

  • (?<= <EXP>)是一个积极的观察<EXP>,更多的解释在这里
  • \w 匹配任何字母字符,大写或小写.
  • \^^从字面上匹配字符
  • 22从字面上匹配字符
  • (?! <EXP>)这里有<EXP>更多解释,是一个负面的预测.
  • [0-9.]匹配所有数字和小数,如583.14.

因此,它一起匹配2前面的数字,x^不是数字.

有了它,您可以使用java的Pattern类来查找和重建带有new的字符串².更多关于这一点

请注意,为了获得java正则表达式的反斜杠,您需要使用由字符表示的字面反斜杠字符\\.因此最终结果看起来像(?<=\\w)\\^2(?![0-9.]).