【问题标题】:Java regex - Replace "x^2" with "x²" but NOT "x^27" with "x²7"Java 正则表达式 - 将“x^2”替换为“x²”,但不将“x^27”替换为“x²7”
【发布时间】:2016-02-13 19:22:46
【问题描述】:

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

我的代码:

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

System.out.println(equation);

这适用于“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”这样的自定义字符,谢谢!

【问题讨论】:

  • 有没有可能出现 x^3y 之类的情况?
  • @LukaJacobowitz 当我有一个解决方案时,我想用它来用“x³”替换“x^3”。我的方程将不包含第二个变量“y”。

标签: java regex replace match


【解决方案1】:

这是一个正则表达式,它将匹配x^2 中的2a^2+... 中的2,但不匹配x^20 中的2

(?<=\w)\^2(?![0-9.])

具体来说:

  • (?&lt;= &lt;EXP&gt;) 是对&lt;EXP&gt; 的正面回顾,更多解释here
  • \w 匹配任何字母字符,大写或小写。
  • \^^ 字符字面匹配
  • 22 字符字面匹配
  • (?! &lt;EXP&gt;) 是对 &lt;EXP&gt; 的否定前瞻,更多解释 here
  • [0-9.] 匹配所有数字和小数,例如 583.14

因此,它与前面有 x^2 相匹配,而 不是 后面跟着一个数字。

这样,您可以使用 java 的 Pattern 类来查找并使用新的 ² 重建字符串。更多关于here

请注意,为了在 java 正则表达式中添加反斜杠,您需要由 \\ 表示的文字反斜杠字符。因此最终结果看起来像(?&lt;=\\w)\\^2(?![0-9.])

【讨论】:

  • 谢谢你,这工作完美! :) PS:我不得不为 java 添加一个反斜杠,如 "x\\^2(?![0-9])"。您提供的链接也很有帮助,所以我也可以替换其他符号,如“³”。
  • 不客气!我将添加一个编辑,以供后代使用。如果可以的话,我会喜欢那张绿色支票
  • @Mshnik 是否有一种简短的方法可以匹配字母表中每个可能的字符而不是 x?
  • @Mshnik 字符类\w 在这里更合适(如果有人想使用该变量名,它也会找到é^2),而且[0-9] 相当于@987654352 @.
  • @trinity420 现在只匹配表达式中的2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
相关资源
最近更新 更多