代码之家  ›  专栏  ›  技术社区  ›  John Rennemeyer

在字符串的%符号前面检索数字的正则表达式是什么?

  •  0
  • John Rennemeyer  · 技术社区  · 16 年前

    我正在使用一个使用%作为mod符号的数学分析器。我想使用它作为百分比符号,而不是允许用户键入“25%*10”或“25%/10”,并接收答案“2.5”(他们可以键入任何内容)。

    然后,我将使用请求的regex来获取“25%”(可能在字符串的任何部分中)并进行简单计算(25/100),然后将字符串中的25%替换为要传递给数学分析器的计算值。基本上,在将完整的字符串传递给数学分析器之前,我要对百分比符号前面的数字进行一些预计算。

    我一直在和雷杰克斯斗争,希望有人能帮助我。

    谢谢

    2 回复  |  直到 10 年前
        1
  •  6
  •   NickZoic    16 年前

    最简单的方法是让数学解析器进行除法:

    s/([0-9.]+)%/($1\/100)/g
    

    用“(25/100)”代替“25%”…因此,如果用户键入“ 25%*10 “他们现在有了” (25/100)*10 “在评估时给出了正确的答案。

    或者,在Perl中,您可以执行以下操作:

    s{([0-9.]+)%}{$1/100}eg
    

    它会让Perl计算100的除法并将其传递给数学解析器。

        2
  •  1
  •   Svante    16 年前

    在“%”符号之前查找数字的正则表达式是 /(\d+)%/ .

    但是,数学表达式不是常规语言,因此正则表达式可能不是正确的工具。你应该告诉你 语法分析器 将“%”解释为“接受在此之前发生的一切,并将其除以100”。无论在这之前发生什么,“都可以是任何数学表达式,并且不会遇到运算符优先问题。您可以在语法树解析器中对它们进行排序。

    将文本替换与真实语言特性相混合常常违反最小惊异原则。当用户看到“%”将前面的内容除以100时,他可能会尝试使用如下表达式 (23+42)% ,但这只会产生语法错误。另外,如果你有类似的东西,你需要一个更精细的regex。 1.34e-14% 但是当您使用树解析器时,这些事情会自行解决。