使用正则表达式在匹配中插入文本

时间:2014-10-23 16:17:54

标签: regex actionscript-3

正则表达式令人难以置信。我正处于我的正则表达初期阶段,因此非常感谢帮助解决以下问题。

我必须搜索一个字符串,以匹配不被运算符,幂或负号包围的P字符。然后我必须插入一个乘法符号。案例包括:

33+16*55P would become 33+16*55*P
2P would become 2*P
P( 33*sin(45) ) would become P*(33*sin(45))

我写了一些我认为处理这个的正则表达式虽然我不知道如何使用正则表达式我可以插入一个字符:

我写的是:

[^\^\+\-\/\*]?P+[^\^\+\-\/\*]

将使用RegEx的语言是ActionScript 3。

正则表达式的实例可以在以下位置看到:

http://www.regexr.com/39pkv

如果有人能告诉我如何在比赛中间插入一个乘法符号,即P2,变为P * 2,22.5P变为22.5P

,我将非常感激。

ActionScript 3具有搜索,匹配和替换所有都使用正则表达式的函数。我不确定我在这种情况下如何使用string.replace(expression,replaceText)。

非常感谢提前

2 个答案:

答案 0 :(得分:2)

正则表达式用于查找字符串中的模式。它不能用来操纵它们。您需要使用动作脚本。

许多编程语言都有一个接受正则表达式模式的string.replace方法。由于你有两种情况(在P之后和之前插入),一个简单的解决方案是将你的正则表达式分成两个([^\^\+\-\/\*]?P+P+[^\^\+\-\/\*],例如,这可能需要调整),并切换每个模式使用匹配的字符串(“* P”和“P *”)

答案 1 :(得分:1)

欢迎来到正常表达的奇迹(以及将导致撕裂头发的不可避免的挫折)。您应该阅读using regular expressions in ActionScript上的文档以及this similar question

您需要将RegExp.test()String.replace()功能合并。我不知道ActionScript,所以我不知道它是否会按原样运行,但根据上面链接的文档,下面应该是一个很好的测试开始,并了解它的形式你的解决方案看起来像。我认为@ Vall3y是对的。为了获得正确的替换,您需要首先检查导致P的任何内容,然后检查P之后的任何内容。因此,两个函数可能更容易实现,而不会对Regex过于花哨:

   private function multiplyBeforeP(str:String):String {
      var pattern:RegExp = new RegExp("([^\^\+\-\/\*]?)P", "i");
      return str.replace(pattern, "$1*P");
  }

   private function multiplyAfterP(str:String):String {
      var pattern:RegExp = new RegExp("P([^\^\+\-\/\*])", "i");
      return str.replace(pattern, "P*$1");
  }